######################################################################################################################################
#
# Funktionen ( Auszug):
# Lautstärke des Tonrufs am Telefon hochdrehen. (Default=0, Normal eher 3)
# Sofortige Rufumleitungsziel: Nst. 100
# Sofortige Rufumleitung: an/aus = $true/$false
# Umleitung bei besetzt: an/aus
# Umleitung bei besetzt zur Nst. xxx
# Umleitung nach Zeit: an/aus
# Umleitungsziel nach Zeit: Nst. xxx
# Zeit in Sekunden: (25)
# Verbinden durch auflegen: ein
# Desktop Sharing möglich: ein
# Anrufinformation bei normalen Anrufen im Tray: ein
# Anrufinformation im Tray für andere: ein
# Immer aktiv auf dem Desktop: aus
# Pop up beim klingeln: ein 
# Minimieren nach Gespräch: ein 
# Minimieren im TrayIcon: aus
# Hotkey alt-x für Client in den Vordergrund bringen
# Zweitanruf unterbinden
# und noch einiges mehr........ ;-)
#
# Erstellt von Mathias Storck am 16.11.2017.
#
# Historie:
# V3.6:   - Bei der Installation FTP-Server und Web-Server wird jetzt erst geprüft ob die Dienste bereits installiert sind. 
# V3.5:   - Scriptcode für bessere Wartbarkeit überarbeitet Teil 2, Hole mir jetzt selbst Admin Rechte falls ich noch keine habe. Name von NewTool auf OpenAdmin geändert.
# V3.4:   - Scriptcode für bessere Wartbarkeit überarbeitet, kleinere Fehler beseitigt (Anzeige der RegKys), Funktion "Kopieren von Funktionstasten" deaktiviert 
#         -	wegen Problemen mit den Leitungstasten. FTP Firmware Download jetzt aus dem Ordner "fw11" anstelle von "fw10" incl. Anzeige des Transfers. (nur *.img, *.bmp und *.png Dateien)
# V3.3:   - Backup Menü überarbeitet. Jetzt kann das Backupziel ausgewählt werden und beim Restore ebenfalls. (C:\Backup\Backups\, D:\Backup\OpenAdmin(bei MAX Version) bzw. Standardpfad.
# V3.2:   - Bei einer MAX/SwyxExpress Version wird das Datenbank Backup automatisch auch auf die SD-Karte in das Verzeichnis D:\Backup\OpenAdmin kopiert, 
#		  -	Backup und Restore jetzt auch von Laufwerk D:\Backup\OpenAdmin möglich.
#         - Wenn beim Start kein Backup erzeugt werden kann kommt jetzt die Frage ob trotzdem weitergemacht werden soll anstelle von automatisch das Script zu beenden.
#         - Der Name der erzeugten Datenbank Backups ist jetzt im deutschen Format anstelle des englischen. Bsp.: IpPbxBackup-11-05-2017-22-52-17.dat
#         - Funktion "Aktuelle Benutzerlizenzen und Lizenzstatus anzeigen" hinzugefügt (9-8).
# V3.1:   - Kopieren von Funktionstasten eines Musterusers auf alle Mitglieder der Konfig-Gruppe hinzugefügt (8-9), SwyxWare Version auslesen hinzugefügt (9-7)
# V3.0:   - Lizenzkey auslesen funktioniert jetzt auch mit 2008 Server, beenden muss jetzt nicht mehr mit "j" bestätigt werden. Start weiter beschleunigt.
# V2.9:   - Neue .bat Datei hinzugefügt zum Starten per rechter Maustaste als Administrator. Beim ändern der Mediabridge kommt eine Abfrage ob die Dienste neu gestartet werden sollen.
# V2.8:   - Aktive Userliste mit Informationen(ClinetVersion, IP, MAC, Betriebssystem) überarbeitet, jetzt mit zusätzlicher Tabelle UserID Username Rufnummer.
#		  - Pin der User kann jetzt 6-stellig gesetzt werden. Dazu wird die Rufnummer mit 0 auf 6 Stellen erweitert. Bsp.: Nst = 15, Pin = 150000 oder Nst. = 123, Pin = 123000 	
# V2.7:   - Script prüft ob es eine Netphone oder Swyxware ist und passt die Pfade an. Copy Callrouting Funktion überarbeitet (Abfrage Rufnummer statt Name mit Prüfung).
# V2.6:   - Wenn keine Verbindung zur Netphone hergestellt werden kann kommt ein Hinweis zum Anlegen eines Users mit Admin Rechten, danach ein Fenster zum Eingeben der Logindaten. 
# V2.5:   - Unterschiedliche Behandlung Windows Server 2008 bzw. 2012 (Firewall, Windows Features)
# V2.4:   - Prüfung der Powershell Version eingebaut, falls kleiner als Version 4 mit Warnung beenden. Windows Server hat im Default nur Version 2.0 an Board.
# V2.3:   - Fehlerabsicherunegen beim Start erweitert wegen diverser Probleme im Wirkbetrieb. Prüfungen an den Anfang des Scripts verschoben. Bei Fehler stopt das Script.
# V2.2:   - Zugeordneter User ist jetzt nicht mehr die Zentrale sondern der User Konferenz, Musteruser für Namenstasten kann eingegeben werden und ist nicht mehr fest die Nr. 99
# V2.1:   - Fall in der Netphone bei keinem User der Administrator als Windows Account zugeordnet ist wird automatisch der Administrator dem internen User Zentrale zugeordnet
#		  - und die Verbindung zur Netphone erneut hergestellt. Beim beenden wird dies wieder rückgängig gemacht. (Windows Account dem User Zentrale wieder entfernt) 
# V2.0.3: - Autom. Größenanpassung des Fensters beim Start. Jetzt als EXE Version.
# V2.0.2: - Funktion (13) Kopieren und löschen von Leitungstasten für User der Konfig-Gruppe hinzugefügt. Schreiben und löschen von Client Zertifikaten wegen hoher CPU Last überarbeitet.
# V2.0.1: - Fehler beim Kopieren von Namestatsten beseitigt. (7-1, 7-2 und 7-3) Es wurden nur die ersten 11 Tasten kopiert, sofortige Anwahl war aus.
# V2.0:   - Sicherheitsabfrage bei Rufumleitungen für alle User hinzugefügt. Menüpunkt 8-6 (Bei der nächsten Anmeldung Passwort ändern verschoben nach Clienteinstellungen 6-11)
#         - Windows Lizenkey auslesen (14) nach Systeminformationen verschoben (9 - 6). Beim Start des Scripts wird automatisch ein Datenbank Backup erstellt.
#         - Menüpunkt Windows Features installieren (12) erstellt und FTP Server, Firmware und Telnet Client installationen dorthin verschoben.
# V1.7.7: - Script startet jetzt auch ohne Admin Rechte, aber mit Warnung!
# V1.7.6: - Funktion Check RemoteConnector Ports hinzugefügt (Menüpunkt 9 - 5), Telnet Client installieren hinzugefügt. (Menüpunkt 15). 
# V1.7.5: - Funktion Windows Lizenzkey auslesen hinzugefügt.
# V1.7.4: - Name für Desktopverknüpfung war falsch, Im Menü 3 (Rufumleitung für alle) war der Punkt 3 zweimal vorhanden (1,2,3,3 anstatt 1,2,3,4), FTP Server Installation geändert.
# V1.7.3: - Fehlerbeseitigung bei der Function Namenstasten beseitigt. (q und 1 ohne Funktion bei Punkt 2 und 3)
# V1.7.2: - Auto Firmware Update IP-Phone verschoben in das IP-Telefon Menü 2-9 nach 8-9). In mehreren Menüs Falscheingaben abgefangen. (Ein/Aus Funktionen) 
# V1.7.1: - Aus Menü 11 mit 0 zurück funktioniert jetzt. Im Menü 2: Punkt 9 und 10 getauscht. Wieder Rechtschreibfehler gefunden. ;-)
# V1.7:   - Menüs für bessere Lesbarkeit überarbeitet.
# V1.6.9: - FaxClient Einstellungen hinzugefügt.
# V1.6.8: - Internet Testfunktion für FTP Download hinzugefügt.
# V1.6.7: - Fehlerbeseitigungen FTP-Server Installation.
# V1.6.6: - Funktion FTP-Server installieren und Firmwaredownload + Install Phonewhitelist hinzugefügt.
# V1.6.5: - Funktion Namenstasten der User Konfig-Gruppe mit gekürztem Vornamen hinzugefügt. + alle Tasten löschen anstelle 20.
#           Sortieren der Namenstasten nach Name bzw. Rufnummer hinzugefügt, Klingellautstärke jetzt individuell einstellbar 0 - 7.
# V1.6.4: - Neue Funktion "Info über Systemstatus" hinzugefügt. ( Menü 9 - 4 )
# V1.6.3: - Funktion Client Zertifikat für Remote Connector erstellen und löschen hinzugefügt. (Menü 10 - 1-2)
# V1.6.2: - MAC Adresse der Telefone löschen hinzugefügt, PIN der Telefone = eigene Nummer hinzugefügt. (Menü 8 - 4+8)
# V1.6.1: - Mehr Infos in den Funktionen, NTP Server kann selbst eingeben werden.
# V1.6.0: - Alle RegKeys können auch deaktiviert werden, Konfig-Gruppe wird angelegt falls nicht schon vorhanden. 
#           Zeit für Wiederanruf einstellbar, Autom Anmelden IP-Telefon hinzugefügt, Kosmetik am Script (echo gegen Write-Host agw.)
# V1.5.9: - Aktuelle Pin der IP Telefone auslesen hinzugefügt.
# V1.5.8: - Neue Funktion Namenstasten für alle User (1Dummy) hinzugefügt.
# V1.5.7: - Funktion Systeminformationen hinzugefügt. (Userliste, CTI Status) 
# V1.5.6: - Funktion Datenbank wiederherstellen hinzugefügt.
# V1.5.5: - PIN der Telefone auf 2 x eigene Nummer setzen und Passwort ändern hinzugefügt.
# V1.5.4: - Menüs umgeschrieben (zusammengefasst), Namenstasten löschen, 
#           Headset Taste ein/aus und CTI Client Gerät auswählen hinzugefügt.
# V1.5.3: - Warnung wenn Admin keinem Client zugewiesen ist.
# V1.5.2: - SQL Abfrage RemoteConnector hinzugefügt.
# V1.5.1: - Erste lauffähige Version mit den gewünschten Funktionen. 
#
#################################################################################
$Version = "V3.6"
# Hole mir selbst Admin Rechte falls ich noch keine habe
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
    Write-Warning " Noch keine Admin Rechte, frage mal nach..."
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

# Ein Paar benötigte Variablen
$KONFERENZUSER = 0
$MinWidth = 120
$MinHeight = 50

# Festergröße und Buffer einstellen
try
{
    $bufferSize = $host.UI.RawUI.BufferSize

    if ($bufferSize.Width -lt $MinWidth  ) { $bufferSize.Width = $MinWidth  }
    if ($bufferSize.Height -lt $MinHeight ) { $bufferSize.Height = $MinHeight }

    $host.UI.RawUI.BufferSize = $bufferSize

    $windowSize = $host.UI.RawUI.WindowSize

    if ($windowSize.Width -lt $MinWidth  ) { $WindowSize.Width = $MinWidth  }
    if ($windowSize.Height -lt $MinHeight ) { $WindowSize.Height = $MinHeight }

    $host.UI.RawUI.WindowSize = $windowSize
}
catch { }

# Windows Version auslesen
$OSVERSION = (Get-CimInstance Win32_OperatingSystem).Version
if ($OSVERSION -like "6.1*") {$OSNAME = "Server2008"}
if ($OSVERSION -like "6.3*") {$OSNAME = "Server2012"}

# Prüfung ob Netphone oder Swyxit installiert ist
$SwyxPath = 'C:\Program Files (x86)\SwyxWare'
$TComPath = 'C:\Program Files (x86)\Netphone'
if((Test-Path -Path $SwyxPath ))
	{
	   	Write-Host
		Write-Host " Server ist eine Swyxit auf Windows $OSNAME."
		Write-Host
		$SERVERVERSION = "SwyxWare"
		$TargetFile = "C:\ProgramData\Swyx\Backup"
		$ShortcutFile = "$home\Desktop\Swyxware Datenbank Backups.lnk"
		$BACKUPPATH = "Swyx"
	}
if((Test-Path -Path $TComPath ))
	{
		Write-Host
		Write-Host " Server ist eine Netphone auf Windows $OSNAME."
		Write-Host
		$SERVERVERSION = "Netphone"
		$TargetFile = "C:\ProgramData\T-Com\Backup"
		$ShortcutFile = "$home\Desktop\Netphone Datenbank Backups.lnk"
		$BACKUPPATH = "T-Com"
	}
if((!(Test-Path -Path $TComPath )) -and (!(Test-Path -Path $SwyxPath )))
	{
		# Stope Script wenn keine IpPbx Installation gefunden wurde.
		Write-Host
		Write-Host -ForeGroundColor Red  " Keine IpPbx Installation gefunden! Script wird beendet."
		Write-Host
		pause
		break
	}

# Powershell Version prüfen, falls zu alt stop
if ( $PSVersionTable.PSVersion.Major -lt 4) 
	{ 
		 Write-Host
		 Write-Host -ForegroundColor RED " Die installierte Powershell Version ist zu klein (Version: $($PSVersionTable.PSVersion.Major))."
		 Write-Host
		 Write-Host -ForegroundColor RED " Die Mindestanforderung ist Version 4!"
		 Write-Host
		 Write-Host " Das Programm wird beendet."
		 Write-Host
		 pause
		 break
	}
####################################################################################
# Prüfen ob der User Adminrechte hat.
$objIdentitaet = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$objPrincipal = New-Object System.Security.Principal.WindowsPrincipal($objIdentitaet)
 
if(-not $objPrincipal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) 
	{
		Write-Host
		Write-Host -ForegroundColor red " Das Script wird wahrscheinlich nicht mit den notwendigen Rechten ausgeführt!" 
		Write-Host -ForegroundColor red " Einige Funktionen sind wahrscheinlich nicht verfügbar." 
		Write-Host
		Write-Host -ForegroundColor Yellow " Besser ist es die Powershell mit Rechtsklick, 'als Administrator ausführen' zu starten."
		Write-Host
		Write-Host -ForegroundColor Yellow " Mal sehen wie weit wir kommen! Mit ENTER geht es trotz dieses Fehlers weiter....."
		Write-Host
		pause
	}

# Netphone Module in Powershell laden
# Prüfen ob die Module (IpPbx) geladen werden können. Sonst Abbruch.
write-host
write-host -NoNewline -ForegroundColor green { Netphone Module werden geladen..... }

try
{
   if (!(get-module ippbx))
  {
   Import-Module IpPbx -ErrorAction Stop
  }
}

catch
{	
	if (Get-Module -ListAvailable -Name Ippbx) 
	{
		Write-Host
		Write-Host -ForegroundColor Magenta  "Module Ippbx ist im Pfad eingetragen."
		Write-Host
		Write-Host -ForegroundColor Magenta  " Aber irgendetwas ist hier verkehrt, ohne Module kein Script!"
		Write-Host
		Write-Host " Programm wird beendet."
		pause
		break
	} 
	else 
	{
		Write-Host
		Write-Host -ForegroundColor Magenta " Der Pfad zu den IpPbx Modulen ist nicht eingetragen!"
		Write-Host
		Write-Host -ForegroundColor Magenta " Modul IpPbx konnten nicht geladen werden! Ist die Netphone Administrationssoftware mit Powershell Unterstützung installiert?" 
		Write-Host
		Write-Host " Script wird beendet!"
		Write-Host
		pause
		break
	}
}

write-host -ForegroundColor green {OK.}

# Verbindung zur Datenbank herstellen
# Püfen ob eine verbindung zur datenbank hergestellt werden kann, sonst Abbruch.
write-host -NoNewline -ForegroundColor green { Verbindung zur Datenbank wird hergestellt....}

try
{
  Connect-IpPbx -ErrorAction Stop -WarningVariable x
}

catch [Exception]
{ 
  Write-Host	
  Write-Host
  Write-Host -ForegroundColor red " Konnte keine Verbindung zur Netphone herstellen!" 
  Write-Host
  Write-Host -ForegroundColor Yellow " Ohne Verbindung zur Netphone kann das Script nicht ausgeführt werden!"
  Write-Host
  Write-Host -ForegroundColor yellow -nonewline " Die Fehlermeldung lautete:"
  Write-Host -ForeGroundColor red " $_"
  Write-Host
  Write-Host -ForeGroundColor yellow -NoNewline " Die Anmeldung wurde mit folgendem Username  durchgeführt:"
  Write-Host -ForeGroundColor red " $($ENV:USERNAME) "
  Write-Host
  Write-Host -ForegroundColor Yellow " Ist dieser User in der Netphone als Administrator eingetragen? Wahrscheinlich nicht."
  Write-Host
  Write-Host
  Write-Host -ForegroundColor yellow " Letzte Möglichkeit: Bitte in der Netphone einen User anlegen,"
  Write-Host -ForegroundColor yellow " Authentifizierung über Username + Kennwort aktivieren,"
  Write-Host -ForegroundColor yellow " ein Passwort vergeben und den User unter " 
  Write-Host -ForegroundColor yellow " Administration, Administrationsprofil das Profil 'System-Administrator' setzen."
  Write-Host -ForegroundColor yellow " Danach wieder hierher wechseln, ENTER drücken, die Daten hier im Loginfenster eingeben und OK drücken." 
  Write-Host
  pause 

	try
	{
		Connect-IpPbx -UseIpPbxLogin -ErrorAction Stop
	} 

	catch 
	{
	  Write-Host	
	  Write-Host
	  Write-Host -ForegroundColor red " Konnte keine Verbindung zur Netphone herstellen!" 
	  Write-Host
	  Write-Host -ForegroundColor Yellow " Ohne Verbindung zur Netphone kann das Script nicht ausgeführt werden!"
	  Write-Host
	  Write-Host -ForegroundColor yellow -nonewline " Die Fehlermeldung lautete:"
	  Write-Host -ForeGroundColor red " $_"
	  Write-Host
	  Write-Host -ForeGroundColor yellow -NoNewline " Die Anmeldung wurde mit folgendem Username  durchgeführt:"
	  Write-Host -ForeGroundColor red " $($ENV:USERNAME) "
	  Write-Host	
	  Write-Host	
	  pause
	  break		
	}
}

# Warnungen abfangen
if ($x -ne "") 
	{
		Write-Host
		Write-Host
		Write-Host -ForeGroundColor yellow " Der aktuelle User '$env:Username' ist nicht mit einem Netphone Client verbunden."
		Write-Host -ForeGroundColor yellow " Dadurch sind nicht alle Funktionen möglich bzw. werden mit einer Fehlermeldung nicht ausgeführt."
		Write-Host
		Write-Host -ForeGroundColor yellow -nonewline " Versuche den aktuellen Benutzer '$env:Username' jetzt automatisch dem internen User 'Konferenz' zuzuordnen...."

		# Aktueller User in der Netphone dem User Konferenz zuweisen
		Add-IpPbxUserWindowsAccount -username "Konferenz" -NTAccount "$env:computername\$env:Username"

		#Setzte eine Variable um beim beenden des Programms den Konferenzuser wieder zu bearbeiten
		$KONFERENZUSER = 1
		Write-Host -ForeGroundColor yellow ".OK"
		Write-Host
		Write-Host -foregroundcolor yellow -nonewline " Verbinde mich jetzt nochmal neu mit der Netphone..."

		disconnect-ippbx
		Connect-IpPbx -WarningVariable y
				

		# 2. Warnung abfangen
		if ($y -ne "") 
		{
			Write-Host
			Write-Host
			Write-Host -ForeGroundColor red " Der aktuelle User '$env:Username' konnte nicht mit einem Netphone Client verbunden werden!"
			Write-Host
			Write-Host -ForeGroundColor yellow " Dadurch sind nicht alle Funktionen möglich bzw. werden mit einer Fehlermeldung nicht ausgeführt."
			Write-Host
			Write-Host -ForeGroundColor yellow " Besser ist es wenn wir an der Stelle aufhören!"
			Write-Host
			pause
			break
		}
				
		# Soweit OK, kann weitergehen				
		else 	
		{
			Write-Host -foregroundcolor yellow ".OK" 
			Write-Host
			Write-Host -foregroundcolor green " In 2 Sekunden geht es weiter......."
			Write-Host
			sleep 2
		}
	}

# Bis hierhin fehlerfreier Start
if (!$x  -and !$y) {write-host -ForegroundColor green "OK."}

# Backup der Datenbank erstellen bevor es losgeht
Write-Host
Write-Host -ForegroundColor yellow " Erstelle ein Backup der aktuellen Datenbank"
Write-Host

$DATUM = Get-Date -Format dd.MM.yyyy-HH-mm-ss
$Command = "C:\Program Files (x86)\$SERVERVERSION\IpPbxConfig.exe"
$Parms = "/backup -file C:\Programdata\$BACKUPPATH\Backup\IpPbxBackup-$Datum.dat && exit 0 || exit 1"
$Prms = $Parms.Split(" ")
& "$Command" $Prms 

# Fehler beim Backup
if ($LASTEXITCODE -ne 0)
			{	
				Write-Host
				Write-Host -ForegroundColor red " Datenbank Backup konnte nicht erstellt werden. Wahrscheinlich keine oder nicht ausreichende Rechte!"
				Write-Host
				Write-Host -ForegroundColor Yellow " Soll trotz dieses Fehlers mit dem Script fortgefahren werden?"
				Write-Host
				Write-Host "    weitermachen: j:"
				Write-Host "        aufhören: n:"
				Write-Host
				Write-Host
				Write-Host -ForegroundColor Green " Bitte j oder n eingeben:> " -NoNewline
				Write-Host
				$answer = Read-Host
				if ($answer -ne "j") { break }
				else {Write-Host "OK. wir machen weiter"}
	
			}	
# Backup ohne Fehler 
else
	{
		Write-Host
		Write-Host -ForegroundColor yellow " Datenbankbackup erstellt."
		Write-Host
	}
	
# Falls es eine MAX Version ist Datenbankbackup auf SD ins Verzeichnis D:\Backup\OpenAdmin kopieren
		$MAXVERSION = "0"
		$ErrorActionPreference = 'SilentlyContinue'
		$SSDZIEL = "D:\Backup\OpenAdmin" 
		Write-Host -Foregroundcolor yellow -nonewline " Prüfe ob wir eine SD als 2. Laufwerk haben..."
		# Teste ob LW D eine SD ist
		# DriveType2 = Removable Disk, DriveType3 = Local Disk, DriveType4 = Network Drive, DriveType5 = Compact Disk
		if (Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DriveType -eq 2} | Where-Object {$_.DeviceID -eq "D:"})
			{
				Write-Host -Foregroundcolor yellow " JA."
				Write-Host
			
				if (-Not(Test-Path “$SSDZIEL”)) 
					{
						New-Item -ItemType Directory -Force -Path $SSDZIEL
					}
	
					# Name der letzte Backup Datei ermitteln 
					#$FILE = get-childitem $TargetFile | Where-Object { $_.LastWriteTime -gt (get-date).Addminutes(-1)}
					$FILE = Get-ChildItem "$TargetFile" | sort LastWriteTime -desc | select -First (1)

					# Datenbank kopieren
					Copy-Item $TargetFile\\$File -Destination $SSDZIEL
					Write-Host
					if ( Test-Path $TargetFile\\$File )
						{
							Write-Host -Foregroundcolor green " Datenbank Backup nach '$TargetFile\$File' kopiert."
							$MAXVERSION = "1"
						}
					else
						{ 
							Write-Host -ForeGroundColor RED "Fehler beim kopieren von Datenbank Backup nach '$TargetFile\$File'!"
							sleep 3
						}
			}

		else
		{
		Write-Host -Foregroundcolor yellow " NEIN."
		}

# Verknüpfung zum Backup Ordner auf Desktop erzeugen
Write-Host
Write-Host -ForegroundColor green " Erstelle auf dem Desktop eine Verknüpfung zum Ordner $TargetFile falls nicht vorhanden...."   
Write-Host 
if (-Not(Test-Path “$ShortcutFile”)) 
	{
		$WScriptShell = New-Object -ComObject WScript.Shell
		$Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
		$Shortcut.TargetPath = $TargetFile
		$Shortcut.Save()
	}	 

# Konfig-Gruppe anlegen falls nicht vorhanden
Write-Host -ForegroundColor green " Erzeuge in der Netphone die Konfig-Gruppe falls nicht vorhanden...."   
Write-Host 
$group = Get-IpPbxGroup -GroupName "Konfig-Gruppe" 
if ($group.Name -ne "Konfig-Gruppe") 
	{
		New-IpPbxGroup -Comment "Angelegt von OpenAdmin" -GroupName "Konfig-Gruppe" | Add-IpPbxGroup
	}

# Beginn der Funktionen
function function1 
	{
		cls
		Write-Host
		Write-Host " #####################################################################"
		Write-Host " #                                                                   #" 
		Write-Host " #   Windows Einstellungen:                                          #"
		Write-Host " #                                                                   #" 
		Write-Host " #####################################################################"
		Write-Host
		Write-Host "  1. Windows Updates nur laden aber nicht installieren."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  2. Windows Updates automatisch laden und installieren."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  3. Administrator Kennwort läuft nicht ab setzen."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  4. Aktuelles Netzwerk auf Privat setzen."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  5. Alle Netphone Dienste in der Firewall auf das Profil Any setzen."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  6. DSCP Wert mit gpedit.msc auf 46 stellen und aktivieren."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  7. Alle nicht identifizierten Netzwerke auf Privat setzen."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  8. Terminsalserver: 2 Sitzung erlauben (RDP)."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  9. Alles ausführen (Storck Default setzen)."
		Write-Host " --------------------------------------------------------------------"
		Write-Host "  0. zurück"  
		Write-Host " --------------------------------------------------------------------"
		Write-Host
		Write-Host -ForegroundColor Green " Eingabe:> " -NoNewline
		$answer1 = Read-Host
		
		if ($answer1 -eq "1") 
			{
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Windows Updates werden konfiguriert...."
				$WUSettings = (New-Object -com "Microsoft.Update.AutoUpdate").Settings
				$WUSettings.NotificationLevel=3
				$WUSettings.save()
				# ' 1 =  Keine Updates
				# ' 2 =  Download und Installation manuell
				# ' 3 =  Download ja, Installation manuell
				# ' 4 =  Download und Installation automatisch
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function1
			}
		
		if ($answer1 -eq "2") 
			{
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Windows Updates werden konfiguriert...."
				$WUSettings = (New-Object -com "Microsoft.Update.AutoUpdate").Settings
				$WUSettings.NotificationLevel=4
				$WUSettings.save()
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function1
			}

		if ($answer1 -eq "3") 
			{
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Kennwort für Administartor läuft nicht ab setzen...."
				$user = [adsi]"WinNT://$env:computername/administrator"
				$user.UserFlags.value = $user.UserFlags.value -bor 0x10000
				$user.CommitChanges()
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function1
			}
		
		if ($answer1 -eq "4") 
			{
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Netzwerkprofil auf Privat setzen...."
				if ($OSNAME -eq "Server2012") 
					{
						Set-NetConnectionProfile -NetworkCategory Private
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
					}
				Else 
					{	Write-Host
						Write-Host
						Write-Host
						Write-Host " Funktion unter Windows 2008 R2 nicht verfügbar. Bitte über Gpedid.msc ändern"
						Write-Host
						Write-Host
					}
					
				sleep 3
				function1
			}		

		if ($answer1 -eq "5") 
			{
				Write-Host
				Write-Host -ForegroundColor Green " Alle Netphone Dienste in der Firewall auf Profil Any setzen...."
				if ($OSNAME -eq "Server2012") 
					{	
						Write-Host
						Write-Host " Betriebssystem ist Windows Server 2012"
						Write-Host
						$SERVICES = Get-NetFirewallRule -DisplayName "Netphone*" 
						foreach ($Dienst in $SERVICES)
							{	
								Set-NetFirewallRule -Profile Any $Dienst
								Write-Host " Schreibe Regel für Dienst $($Dienst.DisplayName)"																			
							}
						# Der Dienst hat kein Netphone im Namen, deshalb hier extra Behandlung
						Write-Host " Schreibe Regel für Dienst "IpPbxCDS"...." 
						Get-NetFirewallRule -DisplayName "IpPbxCDS" | Set-NetFirewallRule -Profile Any
						
					}
				if ($OSNAME -eq "Server2008") 
					{	
						Write-Host
						Write-Host " Betriebssystem ist Windows Server 2008 R2"
						# Netphone Dienste finden
						$langname = netsh advfirewall firewall show rule name=all | find "Rule Name:" | findstr /i "Netphone*"
								
						# Der Dienst hat kein Netphone im Namen, deshalb hier extra Behandlung
						Write-Host " Schreibe Regel für Dienst "IpPbxCDS"...." 	
						netsh advfirewall firewall set rule name="IpPbxCDS" new profile=any
												
						# Split Felder Rule Name: xxxxxxx
						foreach ($Netphonedienste in $langname ) 
							{
								$Netphonedienste = $Netphonedienste.split(":")

								# Trimm Leerstellen am Anfang
								foreach($Name in $Netphonedienste[1])
									{ 
										$name = $name.trim()
										#Info ausgeben
										Write-Host " Schreibe Regel für $Name...." 
												
										# Schreibe neue Regeln
										netsh advfirewall firewall set rule name=$Name new profile=any
									}
							}
					}
				Write-Host							
				Write-Host -ForegroundColor Green " fertig."	
				Write-Host
				sleep 3
				function1
			}
		
		if ($answer1 -eq "6") 
			{
				gpedit.msc
				Write-Host
				Write-Host -ForeGroundColor Yellow " Anleitung:"
				Write-Host -ForeGroundColor Yellow " Computerkonfiguration, Administrative Vorlagen, Netzwerk, QoS-Paketplaner...."
				Write-Host -ForeGroundColor Yellow " DSCP-Wert von übereinstimmenden Paketen, Garantierter Diensttyp:"
				Write-Host -ForeGroundColor Yellow " Aktiveren und DSCP-Wert auf 46 stellen."
				Write-Host
				pause
				function1
			}

		if ($answer1 -eq "7") 
			{
				Write-Host
				secpol.msc
				Write-Host
				Write-Host -ForeGroundColor Yellow " Anleitung:"
				Write-Host -ForeGroundColor Yellow " Netzwerklisten-Manager-Richtlinien, nicht identifizierte Netzwerke, Eigenschaften:"
				Write-Host -ForeGroundColor Yellow " Standorttyp auf Privat setzen."
				Write-Host
				pause
				function1
			}

		if ($answer1 -eq "8") 
			{	
				# Terminsalserver
				$info8 = " Terminsalserver: 2 Sitzung erlauben (RDP) wird geschrieben...."
				$name8 = "fSingleSessionPerUser"
				$pfad5 = "HKLM:SYSTEM\CurrentControlSet\Control\Terminal Server"
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline $info8
				if (-Not(Test-Path “$pfad5”)) 
					{
						New-Item -Path “$($pfad5.TrimEnd($pfad5.Split(‘\’)[-1]))” -Name “$($pfad5.Split(‘\’)[-1])” -Force | Out-Null
					}
				Set-ItemProperty -Path “$pfad5” -Name $name8 -Type Dword -Value “0”
				(Write-Host -ForegroundColor Green " fertig.")
				Write-Host
				sleep 3
				function1
			}
		
		if ($answer1 -eq "9") 
			{
				# Alles ausführen
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Windows Updates werden konfiguriert...."
				$WUSettings = (New-Object -com "Microsoft.Update.AutoUpdate").Settings
				$WUSettings.NotificationLevel=3
				$WUSettings.save()
				# ' 1 =  Keine Updates
				# ' 2 =  Download und Installation manuell
				# ' 3 =  Download ja, Installation manuell
				# ' 4 =  Download und Installation automatisch
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Kennwort für Administartor läuft nicht ab setzen...."
				$user = [adsi]"WinNT://$env:computername/administrator"
				$user.UserFlags.value = $user.UserFlags.value -bor 0x10000
				$user.CommitChanges()
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Netzwerkprofil auf Privat setzen...."
				Set-NetConnectionProfile -NetworkCategory Private
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline " Alle Netphone Dienste in der Firewall auf Profil Any setzen...."
				Get-NetFirewallRule -DisplayName "Netphone*" | Set-NetFirewallRule -Profile Any 
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				gpedit.msc
				Write-Host
				$info8 = " Terminsalserver: 2 Sitzung erlauben (RDP) wird geschrieben...."
				$name8 = "fSingleSessionPerUser"
				$pfad5 = "HKLM:SYSTEM\CurrentControlSet\Control\Terminal Server"
				Write-Host -ForegroundColor Green -NoNewline $info8
				if (-Not(Test-Path “$pfad5”)) 
					{
						New-Item -Path “$($pfad5.TrimEnd($pfad5.Split(‘\’)[-1]))” -Name “$($pfad5.Split(‘\’)[-1])” -Force | Out-Null
					}
				Set-ItemProperty -Path “$pfad5” -Name $name8 -Type Dword -Value “0”
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
			
				Write-Host " Anleitung:"
				Write-Host " Computerkonfiguration, Administrative Vorlagen, Netzwerk, QoS-Paketplaner...."
				Write-Host " DSCP-Wert von übereinstimmenden Paketen, Garantierter Diensttyp:"
				Write-Host " Aktiveren und DSCP-Wert auf 46 stellen."
				Write-Host
				pause
				Write-Host
				secpol.msc
				Write-Host
				Write-Host " Anleitung:"
				Write-Host " Netzwerklisten-Manager-Richtlinien, nicht identifizierte Netzwerke, Eigenschaften:"
				Write-Host " Standorttyp auf Privat setzen."
				Write-Host
				pause
				Write-Host
				Write-Host -ForegroundColor Green " Alle Aufgaben erledigt."
				sleep 3
				function1
			}
		
		if ($answer1 -eq "0") 
			{
				mainmenu
			}
		else 
				{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function1	  
			} 
	}

#################################################################################
function function2
	{
		cls
		Write-Host
		Write-Host " #######################################################################################"
		Write-Host " #                                                                                     #" 
		Write-Host " #                Netphone Reg Keys:                                                   #"
		Write-Host " #                                                                                     #" 
		Write-Host " #######################################################################################"
		Write-Host
		Write-Host "  1. Pickup bei aktivem Gespräch und gesperrtem Zweitanruf ein/aus."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  2. Gruppenruf bei nicht stören/abwesend ein/aus."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  3. Gruppenruf in Anruferliste ein/aus."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  4. Media Bridge ein/aus."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  5. Zeit für Wiederanruf einstellen."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  6. NTP Server für IP Telefone: ptbtime1.ptb.de oder eigene Eingabe."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  7. Bei Problemen mit Voicemail Fernabfrage auch auf (X-IpPbx… Headerzeilen) schauen."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  8. Login bei IMAP4 Abfrage UTF-8 (bei Passwörtern mit Umlauten) ein/aus."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  9. Reg Keys 1-8 schreiben."
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ---------------------------------------------------------------------------------------"
		Write-Host
		Write-Host -ForegroundColor Green " Eingabe:> " -NoNewline
		$answer2 = Read-Host

		if ($answer2 -eq "1") 
			{
				# Pickup
				$info0 = " Pickup bei aktivem Gespräch und gesperrtem Zweitanruf wird geschrieben...."
				$name0 = "CallNotificationOn2ndCallDisabled"
				$pfad0 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options"
				Write-Host
				Write-Host " Pickup bei aktivem Gespräch und gesperrtem Zweitanruf?"
				Write-Host
				Write-Host "      abbrechen: q:"
				Write-Host "    einschalten: 1:"
				Write-Host "     auschalten: 0:"
				Write-Host
				Write-Host "       default = 0"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus = Read-Host
				if ($einaus -eq "q") {function2}
				if ($einaus -le "1") 
					{
						Write-Host 
						Write-Host -ForegroundColor Green -NoNewline $info0
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad0.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name0 -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function2
					}
			}
		
		if ($answer2 -eq "2") 
			{			
				# Gruppenruf bei nicht stören/abwesend ein	
				$info1 = " Key wird in die Registrierung geschrieben...."
				$name1a = "SkipGroupCallMembersWithActiveDoNotDisturb"
				$name1b = "SkipGroupCallMembersWithActiveAway"
				$pfad1 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options"
				Write-Host
				Write-Host " Gruppenruf bei nicht stören/abwesend?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host
				Write-Host "       default = 0"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				 $einaus = Read-Host
				 if ($einaus -eq "q") {function2}
				 if ($einaus -le "1") 
					{
						Write-Host 
						Write-Host -ForegroundColor Green -NoNewline $info1
						if (-Not(Test-Path “$pfad1”)) 
							{
								New-Item -Path “$($pfad1.TrimEnd($pfad1.Split(‘\’)[-1]))” -Name “$($pfad1.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad1” -Name $name1a -Type Dword -Value “$einaus”
						Set-ItemProperty -Path “$pfad1” -Name $name1b -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function2
					}
			}
			

		if ($answer2 -eq "3") 
			{	
				# Gruppenruf in Anruferliste aus
				$info2 = " Gruppenrufe in Anruferliste wird geschrieben...."	
				$name2 = "WritePhoneCallListEntryOnGroupCall"
				$pfad0 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options"
				Write-Host
				Write-Host " Gruppenruf in Anruferliste?"
				Write-Host
				Write-Host "      abbrechen: q:"
				Write-Host "    einschalten: 1:"
				Write-Host "     auschalten: 0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus = Read-Host
				if ($einaus -eq "q") {function2} 
				if ($einaus -le "1") 
					{
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info2
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad0.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name2 -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function2
					}
			}
	
		if ($answer2 -eq "4") 
			{	
				# Media Bridge aus
				$info3 = " Media Bridge wird ein- bzw. ausgeschaltet...."
				$name3 = "EnableTrunkCallEarlyMedia"
				$pfad0 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options"
				Write-Host
				Write-Host " Media Bridge?"
				Write-Host
				Write-Host "      abbrechen: q:"
				Write-Host "    einschalten: 1:"
				Write-Host "     auschalten: 0:"
				Write-Host
				Write-Host "       default = 0"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus = Read-Host
				if ($einaus -eq "q") {function2} 
				if ($einaus -le "1") 
					{
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info3
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad0.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name3 -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						Write-Host " Bei änderungen an der Mediabridge muss der Serverdienst neu gestartet werden."
						Write-Host " Soll das jetzt gleich erledigt werden? Daudurch fällt die Telefonie kurzzeitig aus."
						Write-Host
						Write-Host "      nein: 0:"
						Write-Host "        ja: 1:"
						Write-Host
						Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
						$janein = Read-Host
						if ($janein -eq "0") 
							{
								Write-Host
								Write-Host -foregroundcolor yellow " Serverdienst wird nicht neu gestartet."
								Write-Host
								sleep 2
								function2
							} 
						if ($janein -eq "1") 
							{ 
								Write-Host -foregroundcolor green " Serverdienst wird jetzt neu gestartet..."
								Write-Host
								$Command = "C:\Program Files (x86)\$SERVERVERSION\IpPbxConfig.exe"
								$Parms = "/stop -y"
								$Prms = $Parms.Split(" ")
								& "$Command" $Prms 
								Write-Host
								Write-Host " warte 2 Sekunden bis zum Start der Dienste..."
								sleep 2
								Write-Host
								$Parms1 = "/start -y"
								$Prms1 = $Parms1.Split(" ")
								& "$Command" $Prms1 
								Write-Host
								sleep 2
								function2
							}
						else 
							{
								 Write-Host
								 Write-Host -foregroundcolor yellow " Serverdienst wird nicht neu gestartet."
								 Write-Host
								 sleep 2
								 function2
							}
					}
			}
	
		if ($answer2 -eq "5") 
			{			
				# Zeit Wiederanruf 			
				$info4 = " Zeit bis Wiederanruf bei Blindtransfer am IP Tel auf wird geschrieben...."
				$name4 = "TransferringStateTimeout"
				$pfad2 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Zeit in Sekunden eingeben:> " -NoNewline
				$zeit = Read-Host
				if ($zeit -eq "q") {function2} 
				Write-Host
				Write-Host -ForegroundColor Green -NoNewline $info4
				if (-Not(Test-Path “$pfad2”)) 
					{
						New-Item -Path “$($pfad2.TrimEnd($pfad2.Split(‘\’)[-1]))” -Name “$($pfad2.Split(‘\’)[-1])” -Force | Out-Null
					}
				Set-ItemProperty -Path “$pfad2” -Name $name4 -Type Dword -Value “$zeit”
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function2
			}
			
		if ($answer2 -eq "6") 
			{	
				# NTP Server
				Write-Host
				Write-Host "        abbrechen mit  q:"
				Write-Host
				Write-Host -ForeGroundColor Green "   Zeitserver =  ptbtime1.ptb.de: 0:"
				Write-Host
				Write-Host -ForeGroundColor yellow "   Zeitserver selbst eingeben:    1:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$ntp = Read-Host
				if ($ntp -eq "q") {function2}
				if ($ntp -eq "0") 
					{
						$info5 = "Zeitserver für IPTels auf ptbtime1.ptb.de wird geschrieben...."
						$name5 = "sntp-addr"
						$pfad3 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options\PhoneConfig"
						Write-Host -ForegroundColor Green -NoNewline $info5
						if (-Not(Test-Path “$pfad3”)) 
							{
								New-Item -Path “$($pfad3.TrimEnd($pfad3.Split(‘\’)[-1]))” -Name “$($pfad3.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad3” -Name $name5 -Value "ptbtime1.ptb.de"
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function2
					}
				if ($ntp -eq "1") 
					{
						# Rufnummer abfragen
						Write-Host
						Write-Host " abbrechen mit q:"
						Write-Host
						Write-Host " IP Addresse oder FQDN möglich:"
						Write-Host
						Write-Host -ForegroundColor Green " Bitte den NTP Server eingeben:> " -NoNewline
						
						$ntpaddr = Read-Host
						
						Write-Host     
						Write-Host " Folgende Daten werden verwendet:"
						Write-Host
						Write-Host -NoNewline " NTP Server:  "
						Write-Host -ForegroundColor Yellow "$ntpaddr"
						Write-Host
						Write-Host -ForegroundColor Green " Ist das richtig? (j/n) " -NoNewline
						$ergebnis = Read-Host
						if ($ergebnis -eq "n"){function2} 
						if ($ergebnis -eq "j")
							{ 
								$info5 = " Zeitserver für IPTels $ntpaddr wird geschrieben...."
								$name5 = "sntp-addr"
								$pfad3 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options\PhoneConfig"
								Write-Host -ForegroundColor Green -NoNewline "$info5"
								if (-Not(Test-Path “$pfad3”)) 
									{
										New-Item -Path “$($pfad3.TrimEnd($pfad3.Split(‘\’)[-1]))” -Name “$($pfad3.Split(‘\’)[-1])” -Force | Out-Null
									}
								Set-ItemProperty -Path “$pfad3” -Name $name5 -Value "$ntpaddr"
								Write-Host -ForegroundColor Green " fertig."
								Write-Host
								sleep 3
								function2
							}
					} 
			}
			
		if ($answer2 -eq "7") 
			{	
				#IMAP Abfragemechanismus
				$info6 = " Abfragemechanismus bei VoicemailFernabfrage auch auf (X_Header) schauen wird geschrieben...."    
				$name6 = "FetchOnlyVoicemails"
				$pfad4 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options"
				Write-Host
				Write-Host "Abfragemechanismus bei VoicemailFernabfrage auch auf (X_Header) schauen?"
				Write-Host
				Write-Host "      abbrechen: q:"
				Write-Host "    einschalten: 1:"
				Write-Host "     auschalten: 0:"
				Write-Host
				Write-Host "       default = 0"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus = Read-Host
				if ($einaus -eq "q") {function2}
				if ($einaus -le "1") 
					{
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info6
						if (-Not(Test-Path “$pfad4”)) 
							{
								New-Item -Path “$($pfad4.TrimEnd($pfad4.Split(‘\’)[-1]))” -Name “$($pfad4.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad4” -Name $name6 -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function2
					}
			}
			
		if ($answer2 -eq "8") 
			{
				# IMAP Login Plain
				$info7 = " Login bei IMAP4 Abfrage (nicht Plain verwenden) wird geschrieben...."
				$name7 = "UseAuthenticatePlain"
				$pfad4 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options"
				Write-Host
				Write-Host " Login bei IMAP4 Abfrage (nicht Plain verwenden)?"
				Write-Host
				Write-Host "      abbrechen: q:"
				Write-Host "    einschalten: 1:"
				Write-Host "     auschalten: 0:"
				Write-Host
				Write-Host "       default = 1"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus = Read-Host
				if ($einaus -eq "q") {function2}
				if ($einaus -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info7
						if (-Not(Test-Path “$pfad4”)) 
							{
								New-Item -Path “$($pfad4.TrimEnd($pfad4.Split(‘\’)[-1]))” -Name “$($pfad4.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad4” -Name $name7 -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function2
					}
			}

		if ($answer2 -eq "9") 
			{
				# Alles ausführen
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Wirklich alles schreiben?  j/n :> " -NoNewline
				$janein = Read-Host
				if ($janein -eq "q") {function2}
				if ($janein -eq "n") {function2} 
				if ($janein -eq "j") 
					{
						Write-Host
						# Pickup
						$info0 = "Pickup bei aktivem Gespräch und gesperrtem Zweitanruf wird geschrieben...."
						$name0 = "CallNotificationOn2ndCallDisabled"
						$pfad0 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options"
						# Gruppenruf bei nicht stören/abwesend ein	
						$info1 = "Key wird in die Registrierung geschrieben...."
						$name1a = "SkipGroupCallMembersWithActiveDoNotDisturb"
						$name1b = "SkipGroupCallMembersWithActiveAway"
						# Gruppenruf in Anruferliste aus
						$info2 = "Gruppenrufe in Anruferliste aus wird geschrieben...."	
						$name2 = "WritePhoneCallListEntryOnGroupCall"
						# Media Bridge aus
						$info3 = "Media Bridge wird ausgeschaltet...."
						$name3 = "EnableTrunkCallEarlyMedia"
						# Zeit Wiederanruf = 30			
						$info4 = "Zeit bis Wiederanruf bei Blindtransfer am IP Tel auf 30 Sekundunden wird geschrieben...."
						$name4 = "TransferringStateTimeout"
						$pfad2 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options"
						# Zeit Wiederanruf = 30			
						$info4 = "Zeit bis Wiederanruf bei Blindtransfer am IP Tel auf 30 Sekundunden wird geschrieben...."
						$name4 = "TransferringStateTimeout"
						# NTP Server
						$info5 = "Zeitserver für IPTels auf ptbtime1.ptb.de wird geschrieben...."
						$name5 = "sntp-addr"
						$pfad3 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options\PhoneConfig"
						#IMAP Abfragemechanismus
						$info6 = "Abfragemechanismus bei VoicemailFernabfrage (X_Header) wird geschrieben...."    
						$name6 = "FetchOnlyVoicemails"
						$pfad4 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options"
						# IMAP Login Plain
						$info7 = "Login bei IMAP4 Abfrage (nicht Plain) wird geschrieben...."
						$name7 = "UseAuthenticatePlain"
						
						Write-Host -ForegroundColor Green -NoNewline $info0
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad0.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name0 -Type Dword -Value “1”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info1
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad1.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name1a -Type Dword -Value “1”
						Set-ItemProperty -Path “$pfad0” -Name $name1b -Type Dword -Value “1”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info2
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad0.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name2 -Type Dword -Value “0”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info3
						if (-Not(Test-Path “$pfad0”)) 
							{
								New-Item -Path “$($pfad0.TrimEnd($pfad0.Split(‘\’)[-1]))” -Name “$($pfad0.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad0” -Name $name3 -Type Dword -Value “0”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info4
						if (-Not(Test-Path “$pfad2”)) 
							{
								New-Item -Path “$($pfad2.TrimEnd($pfad2.Split(‘\’)[-1]))” -Name “$($pfad2.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad2” -Name $name4 -Type Dword -Value “30”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host		
						Write-Host -ForegroundColor Green -NoNewline $info5
						if (-Not(Test-Path “$pfad3”)) 
							{
								New-Item -Path “$($pfad3.TrimEnd($pfad3.Split(‘\’)[-1]))” -Name “$($pfad3.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad3” -Name $name5 -Value "ptbtime1.ptb.de"
						Write-Host -ForegroundColor Green " fertig."
						Write-Host		
						Write-Host -ForegroundColor Green -NoNewline $info6
						if (-Not(Test-Path “$pfad4”)) 
							{
								New-Item -Path “$($pfad4.TrimEnd($pfad4.Split(‘\’)[-1]))” -Name “$($pfad4.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad4” -Name $name6 -Type Dword -Value “0”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host	
						Write-Host -ForegroundColor Green -NoNewline $info7
						if (-Not(Test-Path “$pfad4”)) 
							{
								New-Item -Path “$($pfad4.TrimEnd($pfad4.Split(‘\’)[-1]))” -Name “$($pfad4.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad4” -Name $name7 -Type Dword -Value “0”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						Write-Host -ForegroundColor Green "Alle Aufgaben erledigt."
						sleep 3
						function2
					}
			}
			
		if ($answer2 -eq "0"){mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function2	  
			}
	}
	
#################################################################################
function function3 
	{
		cls
		Write-Host
		Write-Host " ###############################################"
		Write-Host " #                                             #" 
		Write-Host " #  Rufumleitungen für alle Nebenstellen:      #"
		Write-Host " #                                             #" 
		Write-Host " ###############################################"
		Write-Host
		Write-Host "  1. Rufumleitung bei besetzt für alle User aus."
		Write-Host " -----------------------------------------------"
		Write-Host "  2. Rufumleitung nach Zeit für alle User aus."
		Write-Host " -----------------------------------------------"
		Write-Host "  3. Sofortige Rufumleitung für alle User aus."
		Write-Host " -----------------------------------------------"
		Write-Host "  4. Alle Rufumleitung für alle User aus."
		Write-Host " -----------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " -----------------------------------------------"
		Write-Host
		Write-Host -ForegroundColor Green " Eingabe:> " -NoNewline
		$answer3 = Read-Host

		if ($answer3 -eq "1") 
			{
				Write-Host
				Write-Host -ForegroundColor Red " Achtung: Rufumleitungen werden für alle User gesetzt!"
				Write-Host
				Write-Host -NoNewline -ForegroundColor Yellow " Bist du sicher? 'j' :> " 
				$sicher = Read-Host
				if ($sicher -ne "j") {function3}
				if ($sicher -eq "j") 
					{
						Write-Host
						Write-Host -ForegroundColor Green " Rufumleitung bei besetzt aus für alle User 'aus' wird geschrieben für User...."
						Write-Host
						Get-IpPbxUser | ForEach-Object { 
								Write-Host $_.Name
								$_.FwdOnBusy = $false
								update-ippbxuser $_
								}
							Write-Host
							Write-Host -ForegroundColor Green " fertig."
							Write-Host
							sleep 3
							function3
					}
			}
			
		if ($answer3 -eq "2") 
			{
				Write-Host
				Write-Host -ForegroundColor Red " Achtung: Rufumleitungen werden für alle User gesetzt!"
				Write-Host
				Write-Host -NoNewline -ForegroundColor Yellow " Bist du sicher? 'j' :> " 
				$sicher = Read-Host
				if ($sicher -ne "j") {function3}
				if ($sicher -eq "j") 
					{
						Write-Host
						Write-Host -ForegroundColor Green " Rufumleitung nach Zeit 'aus' wird geschrieben für User...."
						Write-Host
						Get-IpPbxUser | ForEach-Object { 
								Write-Host $_.Name
								$_.FwdOnNoAnswer = $false
								update-ippbxuser $_
								}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function3
					}
			}

		if ($answer3 -eq "3") 
			{
				Write-Host
				Write-Host -ForegroundColor Red " Achtung: Rufumleitungen werden für alle User gesetzt!"
				Write-Host
				Write-Host -ForegroundColor Yellow " Bist du sicher? 'j' :> " 
				$sicher = Read-Host
				if ($sicher -ne "j") {function3}
				if ($sicher -eq "j") 
					{
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Sofortige Rufumleitung 'aus' wird geschrieben für User...."
						Get-IpPbxUser | ForEach-Object { 
								Write-Host $_.Name
								$_.DefaultFwd = $false
								update-ippbxuser $_
								}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function3
					}
			}
			
		if ($answer3 -eq "4") 
			{
				Write-Host
				Write-Host -ForegroundColor Red " Achtung: Rufumleitungen werden für alle User gesetzt!"
				Write-Host
				Write-Host -NoNewline -ForegroundColor Yellow " Bist du sicher? 'j' :> " 
				$sicher = Read-Host
				if ($sicher -ne "j") {function3}
				if ($sicher -eq "j") 
					{
						Write-Host
						Write-Host -ForegroundColor Green " Alle Rufumleitung 'aus' wird geschrieben für User...."
						Write-Host
						Get-IpPbxUser | ForEach-Object { 
								Write-Host $_.Name
								$_.DefaultFwd = $false
								$_.FwdOnNoAnswer = $false
								$_.FwdOnBusy = $false
								update-ippbxuser $_
								}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function3
					}
			}
			
		if ($answer3 -eq "0")
			{mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function3	  
			  }
	}
	
#################################################################################
function function4 
	{
		cls
		Write-Host
		Write-Host " ##################################################"
		Write-Host " #                                                #" 
		Write-Host " #  Rufumleitungen für Mitglieder Konfig-Gruppe:  #"
		Write-Host " #                                                #" 
		Write-Host " ##################################################"
		Write-Host
		Write-Host "  1. Rufumleitungsziel sofort."
		Write-Host " --------------------------------------------------"
		Write-Host "  2. Rumuleitungsziel bei besetzt."
		Write-Host " --------------------------------------------------"
		Write-Host "  3. Rumuleitungsziel nach Zeit."
		Write-Host " --------------------------------------------------"
		Write-Host "  4. Zeit für verzögerte Rufumleitung."
		Write-Host " --------------------------------------------------"
		Write-Host "  5. Rufumleitung nach Zeit ein/aus."
		Write-Host " --------------------------------------------------"
		Write-Host "  6. Rufumleitung bei besetzt ein/aus."
		Write-Host " --------------------------------------------------"
		Write-Host "  7. Rufumleitung sofort ein/aus."
		Write-Host " --------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " --------------------------------------------------"
		Write-Host
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer4 = Read-Host
		
		if ($answer4 -eq "1") 
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " Rufumleitungsziel sofort?"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Rufnummer eingeben:> " -NoNewline
				$rufnummer1 = Read-Host
				
				if ($rufnummer1 -eq "q") {function4} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				 if ($rufnummer1  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function4
					}				 
				Write-Host
				Write-Host -ForegroundColor Green " Sofortiges Rufumleitungsziel wird geschrieben...."	   
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						$u = get-ippbxuser -username $Member.Name
						$u.DefaultFwdNum = "$rufnummer1"
						Write-Host $Member.Name
						Update-IpPbxUser $u }
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function4
					}
					
		if ($answer4 -eq "2") 
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " Rufumleitungsziel bei besetzt?"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Rufnummer eingeben:> " -NoNewline
				$rufnummer2 = Read-Host
				
				if ($rufnummer2 -eq "q") {function4} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				 if ($rufnummer2  -notmatch '^\d+$')
					{	
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function4
					}				 
				Write-Host
				Write-Host -ForegroundColor Green " Rufumleitungsziel bei besetzt wird geschrieben...."	   
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						$u = get-ippbxuser -username $Member.Name
						$u.FwdOnBusyNumber = "$rufnummer2"
						Write-Host $Member.Name
						Update-IpPbxUser $u 
					}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function4
			}
			
		if ($answer4 -eq "3") 
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " Rufumleitungsziel nach Zeit?"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Rufnummer eingeben:> " -NoNewline
				$rufnummer3 = Read-Host
				
				if ($rufnummer3 -eq "q") {function4} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				 if ($rufnummer3  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function4
					}				 
				Write-Host
				Write-Host -ForegroundColor Green " Rufumleitungsziel nach Zeit wird geschrieben...."	   
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						$u = get-ippbxuser -username $Member.Name
						$u.FwdOnNoAnswerNumber = "$rufnummer3"
						Write-Host $Member.Name
						Update-IpPbxUser $u 
					}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function4
			}
			
		if ($answer4 -eq "4") 
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " Zeit für verzögerte Rufumleitung?"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Zeit in Sekunden eingeben:> " -NoNewline
				$zeit1 = Read-Host
				if ($zeit1 -eq "q") {function4} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($zeit1  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Zeit eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function4
					}				 
				Write-Host
				Write-Host -ForegroundColor Green " Rufumleitungsziel nach Zeit wird geschrieben...."	   
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						$u = get-ippbxuser -username $Member.Name
						$u.FwdOnNoAnswerTimeout = "$zeit1"
						Write-Host $Member.Name
						Update-IpPbxUser $u 
					}
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function4
			}
			
		if ($answer4 -eq "5") 
			{
				# Ein oder aus
				Write-Host
				Write-Host " Rufumleitung nach Zeit ein/aus?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus1 = Read-Host
				if ($einaus1 -eq "q") {function4}
				if ($einaus1 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Rufumleitung nach Zeit wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								$u = get-ippbxuser -username $Member.Name
								$u.FwdOnNoAnswer = "$einaus1"
								Write-Host $Member.Name
								Update-IpPbxUser $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function4
					}
			}
			
		if ($answer4 -eq "6") 
			{
				# Ein oder aus
				Write-Host
				Write-Host " Rufumleitung bei besetzt ein/aus?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus2 = Read-Host
				
				if ($einaus2 -eq "q") {function4}
				if ($einaus2 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Rufumleitung bei besetzt wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								$u = get-ippbxuser -username $Member.Name
								$u.FwdOnBusy = "$einaus2"
								Write-Host $Member.Name
								Update-IpPbxUser $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function4
					}
			}			
		if ($answer4 -eq "7") 
			{
				# Ein oder aus
				Write-Host
				Write-Host " Rufumleitung sofort ein/aus?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus3 = Read-Host
				
				if ($einaus3 -eq "q") {function4}
				if ($einaus3 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Rufumleitung sofort wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								$u = get-ippbxuser -username $Member.Name
								$u.DefaultFwd = "$einaus3"
								Write-Host $Member.Name
								Update-IpPbxUser $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function4
					}
			}			

		if ($answer4 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function4	  
			}
	}
	
#################################################################################

function function5 
	{
		cls
		Write-Host
		Write-Host " ###########################################################################"
		Write-Host " #                                                                         #" 
		Write-Host " #  Client Einstellungen für Mitglieder der Konfig-Gruppe:                 #"
		Write-Host " #                                                                         #" 
		Write-Host " ###########################################################################"
		Write-Host
		Write-Host "  1. Zweitanruf unterbinden ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  2. Collaboration ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  3. Rufbenachrichtigung in der Taskleiste für Rufe ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  4. Rufbenachrichtigung in der Taskleiste für Rufsignalisierungen ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  5. Beim Klingeln anzeigen ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  6. Minimieren nach Gespräch ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  7. Beim minimieren nus Symbol anzeigen ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  8. Verbinden durch auflegen ein/aus."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  9. Hotkey alt-x für Client in den Vordergrund."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer5 = Read-Host
		
		if ($answer5 -eq "1") 
			{
				Write-Host
				Write-Host " Zweitanruf unterbinden?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 0:"
				Write-Host "    auschalten:  1:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus4 = Read-Host
				
				if ($einaus4 -eq "q") {function5}
				if ($einaus4 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Zweitanruf wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-ippbxuser -username $Member.Name
								$u.SecondCallEnabled = $einaus4
								Update-IpPbxUser $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}		

		if ($answer5 -eq "2") 
			{
				Write-Host
				Write-Host " Collaboration?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus5 = Read-Host
				if ($einaus5 -eq "q") {function5} 
				if ($einaus5 -le "1") 
					{
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Collaboration wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bAppSharingEnabled = $einaus5
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
		if ($answer5 -eq "3") 
			{
				Write-Host
				Write-Host " Rufbenachrichtigung in der Taskleiste für Rufe?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus6 = Read-Host
				
				if ($einaus6 -eq "q") {function5}
				if ($einaus6 -le "1") 
					{ 
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Rufbenachrichtigung in der Taskleiste für Rufe wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bCallNotificationInTray = $einaus6
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
			if ($answer5 -eq "4") 
			{
				Write-Host
				Write-Host " Rufbenachrichtigung in der Taskleiste für Rufsignalisierungen?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus7 = Read-Host
				
				if ($einaus7 -eq "q") {function5}
				if ($einaus7 -le "1") 
					{ 
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Rufbenachrichtigung in der Taskleiste für Rufsignalisierungen wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bCallNotificationInTrayN = $einaus7
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
		if ($answer5 -eq "5") 
			{
				Write-Host
				Write-Host " Client beim Klingeln anzeigen?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus8 = Read-Host
				
				if ($einaus8 -eq "q") {function5}
				if ($einaus8 -le "1") 
					{ 
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Beim Klingeln anzeigen wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bPopUpOnIncomingCall = $einaus8
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
		if ($answer5 -eq "6") 
			{
				Write-Host
				Write-Host " Client minimieren nach Gespräch?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus9 = Read-Host
				
				if ($einaus9 -eq "q") {function5}
				if ($einaus9 -le "1") 
					{ 
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Minimieren nach Gespräch wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bMinimizeWhenInactive = $einaus9
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
		if ($answer5 -eq "7") 
			{
				Write-Host
				Write-Host " Beim minimieren nus Symbol anzeigen?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus10 = Read-Host
				
				if ($einaus10 -eq "q") {function5}
				if ($einaus10 -le "1") 
					{ 
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Beim minimieren nus Symbol anzeigen wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bMinimizeToTrayIcon = $einaus10
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
		if ($answer5 -eq "8") 
			{
				Write-Host
				Write-Host " Verbinden durch auflegen?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus11 = Read-Host
				
				if ($einaus11 -eq "q") {function5}
				if ($einaus11 -le "1") 
					{ 
						Write-Host
						Write-Host -NONEWLINE -ForegroundColor Green " Verbinden durch auflegen wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bTransferViaHookOn = $einaus11
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function5
					}
			}
			
		if ($answer5 -eq "9") 
			{
				Write-Host
				Write-Host -ForegroundColor Green " HotKey wird geschrieben...."
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						Write-Host $Member.Name
						$u = get-IpPbxUserData -username $Member.Name
						$u.m_HotkeySettings | Where-Object {$_.Command -eq "32808"} | ForEach-Object {$_.Key=88; $_.Alt=1; $_.Shift=0; $_.Ctrl=0; $_.ScanCode=539820033}
						Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
					}
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function5
			}			
							
		if ($answer5 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function5	  
			}
	}
	
#################################################################################

function function6 
	{
		cls
		Write-Host
		Write-Host " #####################################################################"
		Write-Host " #                                                                   #" 
		Write-Host " #  Weitere Client Einstellungen für Mitglieder der Konfig-Gruppe:   #"
		Write-Host " #                                                                   #" 
		Write-Host " #####################################################################"
		Write-Host
		Write-Host "  1. Anrufliste Maximal."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  2. Wahlwiederholungsliste Maximal."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  3. Aufmerksamkeitston für signalisierte Rufe (Übernahme)."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  4. Anklopfton für Zweitanrufe ein/aus."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  5. Voicemail Begrüßungsansage auswählen."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  6. Authentifizierung Benutzername Kennwort ein/aus."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  7. Authentifizierung Windows Account ein/aus."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  8. CallRouting Script von Musteruser kopieren."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  9. Headset Taste aktivieren ein/aus."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  10. Klingeln von CTI Geräten."
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  11. Bei der nächsten Anmeldung das Kennwort ändern.  (Konfig-Gruppe)"
		Write-Host " ---------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ---------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer6 = Read-Host
				
		if ($answer6 -eq "1") 
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " Anrufliste Maximal?"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Max. Anzahl eingeben:> " -NoNewline
				$anrufliste = Read-Host
				
				if ($anrufliste -eq "q") {function6} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($anrufliste  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Zahl eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function6
					}				 
				Write-Host
				Write-Host -ForegroundColor Green " Anrufliste Max. wird geschrieben...."	   
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						Write-Host $Member.Name
						$u = get-ippbxuser -username $Member.Name
						$u.MaxPhoneCallListLen = $anrufliste
						Update-IpPbxUser $u 
					}
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function6
			}
					
		if ($answer6 -eq "2")
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " Wahlwiederholungsliste Maximal?"
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Max. Anzahl eingeben:> " -NoNewline
				$redialliste = Read-Host
				
				if ($redialliste -eq "q") {function6} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($redialliste  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Zahl eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function6
					}				 
				Write-Host
				Write-Host -ForegroundColor Green " Redialliste Max. wird geschrieben...."	   
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach($Member in $Members) 
					{
						Write-Host $Member.Name
						$u = get-ippbxuser -username $Member.Name
						$u.MaxRedialListLen = $redialliste
						Update-IpPbxUser $u 
					}
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function6
			}
					
		if ($answer6 -eq "3")
			{
				Write-Host
				Write-Host " Aufmerksamkeitston für signalisierte Rufe (Übernahme)?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus12 = Read-Host
				
				if ($einaus12 -eq "q") {function6}
				if ($einaus12 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Aufmerksamkeitston für signalisierte Rufe (Übernahme) wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bSignalGroupNotificationCall = $einaus12
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}
			
		if ($answer6 -eq "4") 
			{
				Write-Host
				Write-Host " Anklopfton für Zweitanrufe?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus13 = Read-Host
				
				if ($einaus13 -eq "q") {function6}
				if ($einaus13 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Anklopfton für Zweitanrufe wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bEnableKnockingSound = $einaus13
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}
			
		if ($answer6 -eq "5") 
			{
				# Ein oder aus
				Write-Host
				Write-Host " Voicemail Begrüßungsansage?"
				Write-Host
				Write-Host "                       abbrechen mit  q:"
				Write-Host "     Standardansage mit Aufzeichnen:  1:"
				Write-Host "     Standardansage ohne Aufzeichnen: 0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus14 = Read-Host
				
				if ($einaus14 -eq "q") {function6}
				if ($einaus14 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Standardansage wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-ippbxuser -username $Member.Name
								if ($einaus14 -eq "0") {$u.VoiceMailFile = "Standardansage ohne Aufzeichnung.wav"}
								if ($einaus14 -eq "1") {$u.VoiceMailFile = "Standardansage.wav"}
								Update-IpPbxUser $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}			

		if ($answer6 -eq "6") 
			{
				# Ein oder aus
				Write-Host
				Write-Host " Authentifizierung Benutzername Kennwort?"
				Write-Host
				Write-Host "                 abbrechen mit  q:"
				Write-Host "	Benutzername Kennwort ein:  1:"
				Write-Host "	Benutzername Kennwort aus:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus15 = Read-Host
				
				if ($einaus15 -eq "q") {function6}
				if ($einaus15 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Authentifizierung Benutzername Kennwort wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-ippbxuser -username $Member.Name
								if( $einaus15 -eq "0" ) {$u.IpPbxLoginAllowed = $false}
								if( $einaus15 -eq "1" ) {$u.IpPbxLoginAllowed = $true}
								Update-IpPbxUser $u
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}
			
		if ($answer6 -eq "7") 
			{
				# Ein oder aus
				Write-Host
				Write-Host " Authentifizierung Windows Account?"
				Write-Host
				Write-Host "           abbrechen mit  q:"
				Write-Host "	Windows Account ein:  1:"
				Write-Host "	Windows Account aus:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus16 = Read-Host
				
				if ($einaus16 -eq "q") {function6}
				if ($einaus16 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Authentifizierung Windows Account wird geschrieben...."	   
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 

						Foreach($Member in $Members)
							{
								Write-Host $Member.Name
								$u = get-ippbxuser -username $Member.Name
								if( $einaus16 -eq "0" ) {$u.WindowsLoginAllowed = $false}
								if( $einaus16 -eq "1" ) {$u.WindowsLoginAllowed = $true}
								Update-IpPbxUser $u
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}
			
		if ($answer6 -eq "8")
			{
				# Rufnummer abfragen
				Write-Host
				Write-Host " CallRouting Script von Musteruser kopieren."
				Write-Host ""
				Write-Host -foregroundcolor red " Achtung: Die bestehenden Callroutings des Zielusers werden überschrieben bzw. ersetzt!"
				Write-Host
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Rufnummer des Musterusers eingeben:> " -NoNewline
				$rufnummer = Read-Host

				if ($rufnummer -eq "q") {function6} 
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($rufnummer  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function6
					}					 
	 
				$defaultid = Get-IpPbxNumberOwner $rufnummer
				$defaultname = $defaultid.Name
	  
				# Prüfen ob es die Rufnummer gibt.  
				if (!$defaultid) 
					{		
						Write-Host
						Write-Host -ForegroundColor Red "Für diese Rufnummer konnten keine Daten gelesen werden!"
						Write-Host
						sleep 3
						function6
					}
		
				else
					{ 
						Write-Host     
						Write-Host " Folgende Daten werden verwendet:"
						Write-Host
						Write-Host -NoNewline " Rufnummer:  "
						Write-Host -ForegroundColor Yellow "$rufnummer"
						Write-Host -NoNewline " Name:       "
						Write-Host -ForegroundColor Yellow "$defaultname"
						Write-Host
						Write-Host -ForegroundColor Green " Ist das richtig? (j/n) " -NoNewline
						$ergebnis1 = Read-Host

						if ($ergebnis1 -eq "j")
							{
								Write-Host
								Write-Host -ForegroundColor Green " CallRouting Script wird kopiert...."
								Write-Host
								$SourceUser = Get-IpPbxUser -UserName $defaultname -ReadOnly
								$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
								Foreach($Member in $Members) 
									{
										$TargetUser = Get-IpPbxUser -UserName $Member.Name -ReadOnly
										if($SourceUser.Name -ne $TargetUser.Name)
											{
												Write-Host 
												Write-Host -nonewline -foregroundcolor yellow " Schreibe Callrouting für User "
												Write-Host  $TargetUser.Name
									
												Copy-IpPbxUserCallRouting -SourceUserEntry $SourceUser -TargetUserEntry $TargetUser -Overwrite -confirm:$false
											}
									}	
								Write-Host
								Write-Host -ForegroundColor Green " fertig."
								Write-Host
								pause
								function6
							}
					}  
				if ($ergebnis1 -eq "n"){function6}  
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."}
						sleep 2
						function6 
					}
			}

		if ($answer6 -eq "9") 
			{
				Write-Host
				Write-Host " Headset Taste aktivieren?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host "    auschalten:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus17 = Read-Host
				
				if ($einaus17 -eq "q") {function6}
				if ($einaus17 -le "1") 
					{ 
						Write-Host
						Write-Host -ForegroundColor Green " Headset Taste ein/aus wird geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_bUsePhoneHeadset = $einaus17
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}
				
		if ($answer6 -eq "10")
			{
				Write-Host
				Write-Host " Klingeln von CTI Geräten?"
				Write-Host
				Write-Host "    abbrechen mit              q:"
				Write-Host "    Beide:                     0:"
				Write-Host "    Nur CTI Phone Client:      1:"
				Write-Host "    Nur gesteuertes Endgerät:  2:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 , 1 oder 2 eingeben:> " -NoNewline
				$einaus18 = Read-Host
				
				if ($einaus18 -eq "q") {function6}
				if ($einaus18 -le "1") 
					{
						Write-Host
						Write-Host -ForegroundColor Green " Klingeln von CTI Geräten geschrieben...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name							
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_iCtiRingingMode = $einaus18
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
			}
			
		if ($answer6 -eq "11")
			{
				Write-Host
				Write-Host "                      abbrechen mit   q:"
				Write-Host "        Passwort abgelaufen setzen:   1:"
				Write-Host "        Passwort abgelaufen löschen:  0:"
				Write-Host
				Write-Host -ForegroundColor Green " Bei der nächsten Anmeldung das Kennwort ändern (Konfig-Gruppe)?:> " -NoNewline
				$ja = Read-Host
				
				if ($ja -eq "q") {function6}
				if ($ja -eq "1") 
					{
						Write-Host
						Get-IpPbxGroupMember -GroupName "Konfig-Gruppe"  | ForEach-Object { 
							Write-Host $_.Name
							$_.PasswordExpired = $true  
							Update-IpPbxUser $_ 
						}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
				if ($ja -eq "0") 
					{
						Write-Host
						Get-IpPbxGroupMember -GroupName "Konfig-Gruppe"  | ForEach-Object { 
							Write-Host $_.Name
							$_.PasswordExpired = $false  
							Update-IpPbxUser $_ 
						}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function6
					}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."} 
						sleep 2
						function6	
					}
			}
							
			if ($answer6 -eq "0") {mainmenu}
			else 
				{
					write-host -ForegroundColor red {" Falsche Eingabe."}
					sleep 2
					function6	  
				}
	} 
	
#################################################################################

function function7 
	{
		cls
		Write-Host
		Write-Host " #####################################################################################################################"
		Write-Host " #                                                                                                                   #" 
		Write-Host " #     Kopieren von Namenstasten                                                                                     #"
		Write-Host " #                                                                                                                   #" 
		Write-Host " #####################################################################################################################"
		Write-Host
		Write-Host "  1. Namenstasten eines Users auf alle User der Konfig-Gruppe schreiben."
		Write-Host " ---------------------------------------------------------------------------------------------------------------------"
		Write-Host "  2. Alle User der Konfig-Gruppe untereinander Namenstasten sortiert nach Name/Nummer schreiben. (Nachname, Vorname)"
		Write-Host " ---------------------------------------------------------------------------------------------------------------------"
		Write-Host "  3. Alle User der Konfig-Gruppe untereinander Namenstasten sortiert nach Name/Nummer schreiben. (Nachname, V.)"
		Write-Host " ---------------------------------------------------------------------------------------------------------------------"
		Write-Host "  4. Erzeugt User '1Dummy' (Nr.99 oder Auswahl), schreibt ihm Namenstasten sortiert nach Name/Nummer für alle User."
		Write-Host " ---------------------------------------------------------------------------------------------------------------------"
		Write-Host "  5. Allen Usern der Konfig-Gruppe die Namenstasten löschen!."
		Write-Host " ---------------------------------------------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ---------------------------------------------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer7 = Read-Host
		if ($answer7 -eq "1") 
			{
				# Wenn das Script mehrmals aufgerufen wird müssen die Variablen geleert werden, sonst gibt es Fehler.
				$rufnummer1 = ""
				$defaultid1= ""
				$defaultname1 = ""
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Welche Rufummer soll unser Musteruser sein? Bitte die Rufnummer eingeben:> " -NoNewline
				$rufnummer1 = Read-Host
				
				if ($rufnummer1 -eq "q") {function7}
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($rufnummer1  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function7
					}					 
				 
				 $defaultid1 = Get-IpPbxNumberOwner $rufnummer1
				 $defaultname1 = $defaultid1.Name
				  
				# Prüfen ob es die Rufnummer gibt.  
				if (!$defaultid1)
					{		
						Write-Host
						Write-Host -ForegroundColor Red "Für diese Rufnummer konnten keine Daten gelesen werden!"
						Write-Host
						sleep 3
						function7
					}
	
				else 
					{ 
						Write-Host     
						Write-Host " Folgende Daten werden verwendet:"
						Write-Host
						Write-Host -NoNewline " Rufnummer:  "
						Write-Host -ForegroundColor Yellow "$rufnummer1"
						Write-Host -NoNewline " Name:       "
						Write-Host -ForegroundColor Yellow "$defaultname1"
						Write-Host
						Write-Host -ForegroundColor Green " Ist das richtig? (j/n) " -NoNewline
						$ergebnis1 = Read-Host

						if ($ergebnis1 -eq "j"){writekeys}  
						if ($ergebnis1 -eq "n"){function7}  
						else 
							{
								write-host -ForegroundColor red {" Falsche Eingabe."}
								sleep 2
								function7  
							}
					}
			}
			
		if ($answer7 -eq "2") 
			{
				Write-Host
				Write-Host -ForeGroundColor Green " Wie sollen die Tasten sortiert werden? "
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "      nach Name: 1:"
				Write-Host " nach Rufnummer: 2:"
				Write-Host
				Write-Host -ForegroundColor Green " Allen Usern der Konfig-Gruppe untereinander Namenstasten schreiben? :> " -NoNewline
				$einaus7 = Read-Host

				if ($einaus7 -eq "q") {function7}
				if ($einaus7 -eq "1") {$sortieren = 'Name'}
				if ($einaus7 -eq "2") {$sortieren = 'InternalNumbers'}
				Write-Host -ForegroundColor Green " Namenstasten werden geschrieben...."
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName Konfig-Gruppe -ReadOnly -AddDeviceInformation | Sort-Object -Property $sortieren
				$Mitglieder = Get-IpPbxGroupMember -GroupName Konfig-Gruppe -ReadOnly -AddDeviceInformation | Sort-Object -Property $sortieren
				Foreach($Member in $Members) 
					{
						$TargetUser = Get-IpPbxUser -UserName $Member.Name -ReadOnly
						$i=0
						Write-Host $TargetUser.Name
						Foreach($Mitglied in $Mitglieder) 
							{
								$ZielBenutzer = Get-IpPbxUser -UserName $Mitglied.Name -ReadOnly
								#Get-IpPbxSpeedDialKey -UserName $TargetUser.name -SpeedDialKeyId $i 
								if($ZielBenutzer.name -ne $TargetUser.name) 
									{
										Add-IpPbxSpeedDialKey -SpeedDialKey (New-IpPbxSpeedDialKey -Title $ZielBenutzer.name -Number $ZielBenutzer.InternalNumbers -DialImmediately:$true) -UserName $TargetUser.name -SpeedDialKeyId $i
										$i=$i+1
									}
							}
					}
				Write-Host -ForegroundColor Green " fertig."
				sleep 3
				function7
	
			else 
				{
					write-host -ForegroundColor red {" Falsche Eingabe."}
					sleep 2  
					function7  
				}
			}

		if ($answer7 -eq "3") 
			{
				Write-Host
				Write-Host -ForeGroundColor Green " Wie sollen die Tasten sortiert werden? "
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "      nach Name: 1:"
				Write-Host " nach Rufnummer: 2:"
				Write-Host
				Write-Host -ForegroundColor Green " Allen Usern der Konfig-Gruppe untereinander Namenstasten schreiben? :> " -NoNewline
				$einaus7 = Read-Host
				
				if ($einaus7 -eq "q") {function7}
				if ($einaus7 -eq "1") {$sortieren = 'Name'}
				if ($einaus7 -eq "2") {$sortieren = 'InternalNumbers'} 
				Write-Host -ForegroundColor Green " Namenstasten werden geschrieben...."
				Write-Host
				$Members = Get-IpPbxGroupMember -GroupName Konfig-Gruppe -ReadOnly -AddDeviceInformation | Sort-Object -Property $sortieren
				$Mitglieder = Get-IpPbxGroupMember -GroupName Konfig-Gruppe -ReadOnly -AddDeviceInformation | Sort-Object -Property $sortieren
				Foreach($Member in $Members) 
					{
						$TargetUser = Get-IpPbxUser -UserName $Member.Name -ReadOnly
						$i=0
						Write-Host $TargetUser.Name
						Foreach($Mitglied in $Mitglieder) 
							{
								$ZielBenutzer = Get-IpPbxUser -UserName $Mitglied.Name -ReadOnly
								#deklariert die Variable $text1 mit dem Namen
								$text1 = $ZielBenutzer.Name
								if($text1 -match ",")
									{
										#Splittet den Namen nach "," auf
										$text1 = $text1.Split(",") 
										#Text vor erstem Komma, für Nachnamen $text2
										$text2 = $text1[0] 
										#Text nach erstem Komma, für Vornamen
										$text1 = $text1[1]
										#erster Buchstabe des Vornamen $text3, entfernt alles nach dem zweiten Zeichen (, und restliche Buchstaben des Vornamen)
										$text3 = $text1.Remove(2)
									}
								#erzeugt den Labeltext, welcher auf der Kurzwahltaste/Skin angezeigt wird
								$Label = $text2 + "," + $text3 + "." 
								if($ZielBenutzer.name -ne $TargetUser.name) 
									{
										Add-IpPbxSpeedDialKey -SpeedDialKey (New-IpPbxSpeedDialKey -Title $Label -Number $ZielBenutzer.InternalNumbers -DialImmediately:$true) -UserName $TargetUser.name -SpeedDialKeyId $i
										$i=$i+1
									}
							}
					}
				Write-Host -ForegroundColor Green " fertig."
				sleep 3
				function7
	
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."}
						sleep 2 
						function7  
					}	
			}
		
		if ($answer7 -eq "4")
			{
				Write-Host
				Write-Host -ForeGroundColor Green " Welche Rufnummer soll unser Musteruser haben? "
				Write-Host
				Write-Host -ForeGroundColor yellow " Falls nichts einegeben wird nehmen wir einfach die 99"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host
				Write-Host -ForeGroundColor Green " Bitte die gewünschte Rufnummer des Musterusers eingeben:> " -NoNewline
				$Usernumber = Read-Host

				if ($Usernumber -eq "q") {function7}
				If (!$Usernumber) { $UserNumber = "99" }
				Write-Host
				Write-Host -ForeGroundColor Green " Wie sollen die Tasten sortiert werden? "
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "      nach Name: 1:"
				Write-Host " nach Rufnummer: 2:"
				Write-Host
				Write-Host
				Write-Host -ForegroundColor Green " OK, User '1Dummy' mit Rufnummer $Usernumber erzeugen, wie sollen die Tasten sortiert werden? :> " -NoNewline
				$einaus7 = Read-Host
				
				if ($einaus7 -eq "q") {function7}
				if ($einaus7 -eq "1") {$sortieren = 'Name'}
				if ($einaus7 -eq "2") {$sortieren = 'InternalNumbers'}
				Write-Host -ForegroundColor Green " Erzeuge User '1Dummy', schreibe ihm Namenstasten sortiert nach Name für alle User...."
				Write-Host
				$GroupName = "Jeder" #max 80 Mitglieder
				$UserName = "1Dummy"
				$counter = 0

				# User 1Dummy mit Rufnummer 99 anlegen falls noch nicht vorhanden
				if (-Not(get-ippbxuser -Username $UserName))
					{
						Write-Host
						Write-Host " User $UserName existiert noch nicht, lege ihn an..." 
						New-IpPbxUser -Name $UserName | Add-IpPbxUser
						New-IpPbxInternalNumber -InternalNumber $UserNumber | Add-IpPbxInternalNumberToUser -UserName $UserName
					}
				else 
					{
						Write-Host
						Write-Host " User $UserName existiert bereits, lösche ihm erst mal alle Tasten..."
						#löscht alle Kurzwahltasten von $UserName
						Remove-IpPbxSpeedDialKey -UserName $UserName -Confirm:$false
					}
				#setzt die Anzahl auf 80 Kurzwahltasteneinträge = max
				Write-Host
				Write-Host " Maximal 80 Tasten werden pro User geschrieben!"
				Set-IpPbxSpeedDialKeyCount -UserName $UserName -SpeedDialKeyCount 80

				#liest die Gruppenmitglieder ein, welche auf den Kurzwahltasten angezeigt werden sollen und sortiert diese alphabetisch.
				Get-IpPbxGroupMember -GroupName $GroupName -ReadOnly -AddDeviceInformation | Sort-Object -Property $sortieren | ForEach-Object {

							#liest die Variablen für den Usernamen ein
							$Users = Get-IpPbxUser -UserName $_.Name -ReadOnly -AddDeviceInformation 

							#liest die Variablen vom User "$UserName" für die Kurzwahl ein, beginnend mit ID 0
							$update = Get-IpPbxSpeedDialKey -UserName $UserName -SpeedDialKeyId $counter

							#deklariert die Durchwahl
							$update.DialNumber = $Users.InternalNumbers 

							#deklariert die Variable $text1 mit dem Namen
							$text1 = $Users.Name
            

					#wenn in der Namens-Variable ein Komma enhalten ist, dann aufsplitten
					if($text1 -match ",")
						{

							#Splittet den Namen nach "," auf
							$text1 = $text1.Split(",") 

							#Text vor erstem Komma, für Nachnamen $text2
							$text2 = $text1[0] 
							

							#Text nach erstem Komma, für Vornamen
							$text1 = $text1[1]
						   
							#erster Buchstabe des Vornamen $text3, entfernt alles nach dem zweiten Zeichen (, und restliche Buchstaben des Vornamen)
							$text3 = $text1.Remove(2)
						   

							#erzeugt den Labeltext, welcher auf der Kurzwahltaste/Skin angezeigt wird
							$update.Label = $text2 + "," + $text3 + "."  
							
						}

					#wenn im Namen kein Komma vorkommt dann .... 
					else
						{
							#erzeugt den Labeltext, welcher auf der Kurzwahltaste/Skin angezeigt wird
							$update.Label = $Users.Name + " " 
						}

					#zeigt den Inhahalt der Kurzwahlübersicht in der Konsole an, nur Info
					write-output $update 


					#updated die Kurzwahlübersicht des Users $UserName
					update-IpPbxSpeedDialKey -UserName $UserName -SpeedDialKey $update 

					#zählt die ID um 1 hoch
					$counter = $counter + 1 
				}
		
			Write-Host
			Write-Host -ForegroundColor Green " fertig."
			Write-Host
			pause
			function7

			else 
				{
					write-host -ForegroundColor red {" Falsche Eingabe."}
					sleep 2  
					function7  
				}		

			}	   

		if ($answer7 -eq "5") 
			{
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    einschalten: 1:"
				Write-Host
				Write-Host -ForegroundColor Red " Achtung: Bei 1 werden alle Namenstasten der User aus der Konfig-Gruppe gelöscht! :> " -NoNewline
				$achtung = Read-Host
				
				if ($achtung -eq "q") {function7}
				if ($achtung -eq "1")
					{
						Write-Host -ForegroundColor Green " Namenstasten werden gelöscht...."
						Write-Host
						$GroupName = "Konfig-Gruppe"
						Get-IpPbxGroupMember -GroupName $GroupName | ForEach-Object {
							Write-Host
							Write-Host $_.Name
							Write-Host	
							Remove-IpPbxSpeedDialKey -UserName $_.Name -Confirm:$false
							}
						

						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function7
					}			
				}

		if ($answer7 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function7	  
			}
					
	}
	
#################################################################################

function function8 
	{
		cls
		Write-Host
		Write-Host " ##################################################################################"
		Write-Host " #                                                                                #" 
		Write-Host " #  Einstellungen der IP Telefone    (Konfig-Gruppe)                              #"
		Write-Host " #                                                                                #" 
		Write-Host " ##################################################################################"
		Write-Host
		Write-Host "  1. Klingel Lautstärke IP Telefon erhöhen 0 - 7 (Konfig-Gruppe)"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  2. Klingel Lautstärke IP Telefon erhöhen 0 - 7 + HotKey Alt-X (alle User)"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  3. PIN der IP Telefone auf eigene Rufnmmer setzen (Konfig-Gruppe)"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  4. Pin der IP Telefone 6-stellig (Nst. + 0000) Bsp.: 10 > 100000  (Konfig-Gruppe)"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  5. Aktuelle Pin der IP Telefone auslesen"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  6. Automatisches Anmelden ein/aus (Konfig-Gruppe)"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  7. MAC Adresse der Telefone löschen. (Konfig-Gruppe)"
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  8. Auto Firmware Update IP-Phone ein/aus." 
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  9. Kopieren von Funktionstasten der IP-Telefone (Konfig-Gruppe)" 
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ----------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer8 = Read-Host

		if ($answer8 -eq "1")
			{
				Write-Host
				Write-Host -ForeGroundColor Green " Welche Lautstärke soll es sein? 1 - 7 ist möglich. "
				Write-Host
				Write-Host "   abbrechen mit  q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte einen Wert von 1 - 7 eingeben :> " -NoNewline
				$a = Read-Host
				if ($a -eq "q") {function8}
				if ($a -lt "8") 
					{
						Write-Host
						Write-Host -ForegroundColor Green " Klingel Lautstärke (Konfig-Gruppe) erhöhen...."
						Write-Host
						$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
						Foreach($Member in $Members) 
							{
								Write-Host $Member.Name
								$u = get-IpPbxUserData -username $Member.Name
								$u.m_PhoneSettings | Where-Object { $_.VolumeOfRingingToneInternal -ne "8"} |ForEach-Object {$_.VolumeOfRingingToneInternal = $a}
								$u.m_PhoneSettings | Where-Object { $_.VolumeOfRingingToneExternal -ne "8"} |ForEach-Object {$_.VolumeOfRingingToneExternal = $a}
								Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u 
							}
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function8
					}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."} 
						sleep 2
						function8
					}
			}		

		if ($answer8 -eq "2")
			{
				# Wenn das Script mehrmals aufgerufen wird müssen die Variablen geleert werden, sonst gibt es Fehler.
				$rufnummer = ""
				$defaultid = ""
				$defaultname = ""
				Write-Host
				Write-Host " Der hier einzugebende User muss ein IP Telefon zugeordnet haben und es muss auch registriert sein."
				Write-Host " Nur dann haben wir einen vollständigen Datensatz in der Datenbank den wir den anderen Usern"
				Write-Host " zuweisen können. Bei diesem User muss nichts eingestellt sein."
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host ""
				Write-Host -ForegroundColor Green " Welche Rufummer soll unser Musteruser sein? Bitte die Rufnummer eingeben:> " -NoNewline
				$rufnummer = Read-Host
				
				if ($rufnummer -eq "q") {function8}
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($rufnummer  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function8
					}					 
				 
				$defaultid = Get-IpPbxNumberOwner $rufnummer
				$defaultname = $defaultid.Name

				# Prüfen ob es die Rufnummer gibt.  
				if (!$defaultid) 
					{		
						Write-Host
						Write-Host -ForegroundColor Red "Für diese Rufnummer konnten keine Daten gelesen werden!"
						Write-Host
						sleep 3
						function8
					}
	
				else 
					{ 
						Write-Host     
						Write-Host " Folgende Daten werden verwendet:"
						Write-Host
						Write-Host -NoNewline " Rufnummer:  "
						Write-Host -ForegroundColor Yellow "$rufnummer"
						Write-Host -NoNewline " Name:       "
						Write-Host -ForegroundColor Yellow "$defaultname"
						Write-Host
						Write-Host -ForegroundColor Green " Ist das richtig? (j/n) " -NoNewline
						$ergebnis = Read-Host
						if ($ergebnis -eq "n"){function8}  
						if ($ergebnis -eq "j")
							{
								Write-Host
								Write-Host -ForeGroundColor Green "Welche Lautstärke soll es sein? 0 - 7 ist möglich. "
								Write-Host
								Write-Host "                      abbrechen mit  q:"
								Write-Host
								Write-Host -ForegroundColor Green " Bitte einen Wert von 0 - 7 eingeben :> " -NoNewline
								$b = Read-Host
								
								if ($b -eq "q") {function8}
								if ($b -lt "8") {klingeln }  
							  
								else 
									{
										write-host -ForegroundColor red {" Falsche Eingabe."}
										sleep 2  
										function8  
									}
							}
					}
			}

		if ($answer8 -eq "3")
			{
				Write-Host
				Write-Host " PIN der IP Telefone auf 1. eigene Rufnmmer setzen?"
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    PIN setzen:  1:"
				Write-Host
				Write-Host -ForegroundColor Green " PIN der IP Telefone auf 1. eigene Rufnmmer setzen (Konfig-Gruppe)?:> " -NoNewline
				$pin = Read-Host
				
				if ($pin -eq "q") {function8}
				if ($pin -eq "1") 
					{
						$users = get-ippbxgroupmember -groupname Konfig-Gruppe
						Write-Host
						Write-Host " Schreibe PIN für User..."
						Write-Host
						foreach ($user in $users) 
							{  
								Write-Host $user.Name
								$pin = $user.InternalNumberEntryCollection[0].Number
								$user.LanPhonePIN = "$pin"
								update-ippbxuser -userentry $user 
							}
					}
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function8
			}
   
		if ($answer8 -eq "4")
			{
				Write-Host
				Write-Host "  abbrechen mit  q:"
				Write-Host "    PIN setzen:  1:"
				Write-Host
				Write-Host -ForegroundColor Green " Pin der IP Telefone 6-Stellig mit 0 auffüllen. Bsp.: 10 > 100000 (Konfig-Gruppe)?:> " -NoNewline
				$pin = Read-Host
				
				if ($pin -eq "q") {function8}
				if ($pin -eq "1") 
					{
						$users = get-ippbxgroupmember -groupname Konfig-Gruppe
						Write-Host
						Write-Host " Schreibe PIN für User..."
						Write-Host
						foreach ($user in $users) 
							{  
								Write-Host $user.Name
								$pin = $user.InternalNumberEntryCollection[0].Number
								$measureObject = $pin | Measure-Object -Character
								$count = $measureObject.Characters
							#	Write-Host $count
								if($count -eq 1) { $NEWPIN = "$pin" + "00000" }
								if($count -eq 2) { $NEWPIN = "$pin" + "0000" }
								if($count -eq 3) { $NEWPIN = "$pin" + "000" }
								if($count -eq 4) { $NEWPIN = "$pin" + "00" }
								if($count -eq 5) { $NEWPIN = "$pin" + "0" }
							#	Write-Host $NEWPIN
								$user.LanPhonePIN = "$NEWPIN"
								
								update-ippbxuser -userentry $user 
							}
					}
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function8
			}	
			
		if ($answer8 -eq "5")
			{   
				Write-Host
				Write-Host -ForegroundColor Green " Pin der IP Telefone:"
				Write-Host
				Write-Host " ----------------------"
				Write-Host "  Rufnummer:   PIN:   "
				Write-Host " ----------------------"

					# Liest alle User ein
					Get-IpPbxUser -ReadOnly -AddDeviceInformation | ForEach-Object  { 
								
					# Liest die interne Rufnummer
					$nummer  = $_.InternalNumbers 

					# Liest den Usernamen ein
					$name = $_.Name 
							
					# UserDate für PIN abfragen 
					$data = Get-IpPbxUser -Username $name
					$pin = $data.LanPhonePin 
								
					# Wenn User eine Pin hat Daten ausgeben
					If ($pin -gt "0") 
						{ 
							#zeigt den Inhahalt der Kurzwahlübersicht in der Konsole an, nur Info
							Write-host "  $nummer           $pin  " 
							Write-Host " ----------------------"
						}

					}  
				Write-Host
				pause
				function8
			}  

		if ($answer8 -eq "6")
			{
				Write-Host
				Write-Host "               abbrechen mit  q:"
				Write-Host "        Autom. Anmelden aus:  0:"
				Write-Host "        Autom. Anmelden ein:  1:"
				Write-Host
				Write-Host -ForegroundColor Green " Automatisches Anmelden des IP Telefons (Konfig-Gruppe)?:> " -NoNewline
				$einaus = Read-Host
				
				if ($einaus -eq "q") {function8}
				if ($einaus -eq "0") 
					{ 
						Write-Host
						Get-IpPbxGroupMember -GroupName "Konfig-Gruppe"  | ForEach-Object { 
							Write-Host $_.Name
							Set-IpPbxUserPhoneLogin -UserEntry $_ -EnableAutoLogin:$false
						} 
					}
				if ($einaus -eq "1") 
					{
						Write-Host
						Get-IpPbxGroupMember -GroupName "Konfig-Gruppe"  | ForEach-Object {
							Write-Host $_.Name
							Set-IpPbxUserPhoneLogin -UserEntry $_ -EnableAutoLogin:$true
						} 
					}  
				Write-Host
				Write-Host -ForegroundColor Green " fertig."
				Write-Host
				sleep 3
				function8
			}

		if ($answer8 -eq "7")
			{
				Write-Host
				Write-Host "        abbrechen mit  q:"
				Write-Host "              löschen: 1:"
				Write-Host
				Write-Host -ForegroundColor Green " MAC Adresse der Telefone löschen (Konfig-Gruppe)?:> " -NoNewline
				$aus = Read-Host

				if ($aus -eq "q") {function8}
				if ($aus -eq "1") 
					{
						Write-Host
						Get-IpPbxGroupMember -GroupName "Konfig-Gruppe"  | ForEach-Object { 
							Write-Host $_.Name
								Set-IpPbxUserPhoneLogin -UserEntry $_ -PhoneMAC ""
							}  
						Write-Host
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function8
					}
			}
			
		if ($answer8 -eq "8") 
			{
				# Auto Firmware Update IP Tel
				$info7 = " Auto Firmware Update IP-Telefone wird geschrieben...."
				$name7 = "AutoFirmwareUpdate"
				$pfad4 = "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options"
				Write-Host
				Write-Host " Auto Firmware Update IP Tel?"
				Write-Host
				Write-Host "      abbrechen: q:"
				Write-Host "    einschalten: 1:"
				Write-Host "     auschalten: 0:"
				Write-Host
				Write-Host "       default = 0"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte 0 oder 1 eingeben:> " -NoNewline
				$einaus = Read-Host
				
				if ($einaus -eq "q") {function8}
				if ($einaus -le "1") 
					{
				 		Write-Host
						Write-Host -ForegroundColor Green -NoNewline $info7
						if (-Not(Test-Path “$pfad4”)) 
							{
								New-Item -Path “$($pfad4.TrimEnd($pfad4.Split(‘\’)[-1]))” -Name “$($pfad4.Split(‘\’)[-1])” -Force | Out-Null
							}
						Set-ItemProperty -Path “$pfad4” -Name $name7 -Type Dword -Value “$einaus”
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						sleep 3
						function8
					}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."} 
						sleep 2
						function8
					}
			}	

		if ($answer8 -eq "9") 
			{
				#Wegen Fehlern in der Funktion deaktiviert
				Write-Host
				Write-Host -ForeGroundColor Yellow " Funktion zurzeit deaktiviert wegen Fehlern!"
				sleep 3
				function8
					
				# Kopieren von Telefoneinstellungen eines Musterusers auf alle Mitglieder der Konfig-Gruppe
				$rufnummer = ""
				$defaultid= ""
				$defaultname = ""
				
				Write-Host
				Write-Host -ForeGroundColor Yellow " Achtung: Es werden alle Telefoneinstellungen vom Musteruser auf die Mitglieder der Konfig-Gruppe geschrieben!" 
				Write-Host -ForeGroundColor Yellow " Dazu gehören Klingeltöne, Lautstärke, Kontrast, TelefonTyp."
				Write-Host -ForeGroundColor Yellow " Diese Funktion sollte nur bei einer Neueinrichtung genutzt werden oder man weiß was man tut."
				Write-Host
				Write-Host
				Write-Host " abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Welche Rufummer soll unser Musteruser sein? Bitte die Rufnummer eingeben:> " -NoNewline
				$rufnummer = Read-Host

				if ($rufnummer -eq "q")	{ function8 }
		
				# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
				if ($rufnummer  -notmatch '^\d+$')
					{
						Write-Host
						write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
						sleep 3
						function8	
					}					 
 
				$defaultid = Get-IpPbxNumberOwner $rufnummer
				$defaultname = $defaultid.Name
  
				# Prüfen ob es die Rufnummer gibt.  	
				if (!$defaultid) 
					{		
						Write-Host
						Write-Host -ForegroundColor Red "Für diese Rufnummer konnten keine Daten gelesen werden!"
						Write-Host
						sleep 3
						function8
					}
	
				else 
					{ 
						Write-Host     
						Write-Host " Folgende Daten werden verwendet:"
						Write-Host
						Write-Host -NoNewline " Rufnummer:  "
						Write-Host -ForegroundColor Yellow "$rufnummer"
						Write-Host -NoNewline " Name:       "
						Write-Host -ForegroundColor Yellow "$defaultname"
						Write-Host
						Write-Host -ForegroundColor Green " Ist das richtig? (j/n) " -NoNewline
						$ergebnis = Read-Host
						
						if ($ergebnis -eq "n"){function8}  
						if ($ergebnis -eq "j")
							{
								#Daten vom Musteruser auslesen
								$u = Get-IpPbxUser -Name $defaultname
								$ud = Get-IpPbxUserData -UserEntry $u
								
								Write-Host
								Write-Host " Schreibe Daten für User... "
								Write-Host
								
								$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
								Foreach($Member in $Members) 
									{
										#Zieluser Daten auslesen
										$TargetUser = Get-IpPbxUser -UserName $Member.Name -ReadOnly
										$TargetUserData = Get-IpPbxUserData -UserEntry $TargetUser
										
										# PhoneSettings des Zielusers mit den Daten des Musterusers überschreiben
										$TargetUserData.m_PhoneSettings = $ud.m_PhoneSettings
										if("$TargetUser" -ne "$u")
											{
												Write-Host " " $Member.Name
												Set-IpPbxUserData -UserEntry $TargetUser -UserData $TargetUserData
											}
									}  
			  				}
						Write-Host
						Write-Host -ForegroundColor Green " ...fertig."
						Write-Host
						sleep 3
						function8
					}
			}
	
		if ($answer8 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function8	  
			}
	}	

#################################################################################

function function9 
	{
		cls
		Write-Host
		Write-Host " ##############################################################################"
		Write-Host " #                                                                            #" 
		Write-Host " #  Systeminformationen                                                       #"
		Write-Host " #                                                                            #" 
		Write-Host " ##############################################################################"
		Write-Host
		Write-Host "  1. SQL Abfrage Remote Connector Daten"
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  2. Aktive Userliste mit Informationen(ClinetVersion, IP, MAC, Betriebssystem)"
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  3. Status der Nebenstellen (angemeldet/abgemeldet)"
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  4. Informationen über Systemstatus"
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  5. Check RemoteConnector Ports (erreichbar/gesperrt)"
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  6. Lizenzkey auslesen und als Windows_Key.txt auf dem Desktop speichern."
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  7. Installierte SwyxWare Version auslesen."
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  8. Aktuelle Benutzerlizenzen und Lizenzstatus anzeigen."
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer9 = Read-Host

		if ($answer9 -eq "1")
			{
				Write-Host ""
				Write-Host -ForegroundColor Green " Datenbank wird abgefragt.... "
				$DBName = "IpPbx"

				import-module sqlps -DisableNameChecking

				$Path = Set-Location SQLSERVER:\SQL\localhost
				$Instance = dir -Path $Path

				$RemoteConnector = Invoke-Sqlcmd -ServerInstance ("localhost\" + $Instance.InstanceName) -Query "SELECT * From dbo.GlobalConfigItems where subsection = 'RemoteConnector';" -Database $DBName
				$AccessConnector = Invoke-Sqlcmd -ServerInstance ("localhost\" + $Instance.InstanceName) -Query "SELECT * From dbo.GlobalConfigItems where subsection = 'Authentication'; " -Database $DBName
				" "
				"----------------------------"
				"RemoteConnectorEinstellungen"
				"----------------------------"
				foreach($item in $RemoteConnector)
					{
						if($item.KeyName -eq "EnableRemoteAccess") { "Eingeschaltet: = " + $item.ValueInt }
						if($item.KeyName -eq "EndPoint") { "IP bzw. FQDN     = " + $item.ValueString }
						if($item.KeyName -eq "Port") { "Port             = " + $item.ValueInt }
					}
				Write-Host
				"-------------------------------"
				"AuthentifizierungsEinstellungen"
				"-------------------------------"
				foreach($item in $AccessConnector)	
					{
						if($item.KeyName -eq "EndPoint") { "IP bzw. FQDN = " + $item.ValueString }
						if($item.KeyName -eq "Port") { "Port         = " + $item.ValueInt }
					}	
				Write-Host	
				pause
				C:
				function9
			}  
			
		if ($answer9 -eq "2")
			{
				$User = get-ippbxuser | ForEach-Object { add-member -MemberType NoteProperty -Name "DeviceList" -InputObject $_ -Value($adminfacade.GetCurrentUserDevices($_.UserID) ) -PassThru }
				$User.devicelist |ft -auto iuserid, strName, strVersion, strIPAddress, strMACAddress, strOS
				$User.Devicelist | foreach-object { get-ippbxuser -Userid $_.iUserID -Readonly } | ft -auto Userid, Name, InternalNumbers
				Write-Host
				pause
				function9
			}
			
		if ($answer9 -eq "3")
			{
				$phonebook = $LibManager.GetUserPhoneBookEnum()
				Get-IpPbxGroupMember -GroupName "Jeder" -ReadOnly | ForEach-Object {

					$Status = [SWConfigDataClientLib.WSUserPhoneBook.PhonebookStatus]($phonebook.GetPBXPhoneBook($_.name,$true,$true ) | select -first 1 | select -ExpandProperty UserStatus)

					Add-Member -inputobject $_ -MemberType NoteProperty -Name Status -Value $Status -PassThru

				} | sort-object  -property InternalNumbers | format-table Name, InternalNumbers, Status -auto 
				Write-Host
				pause
				function9
			}    	
		if ($answer9 -eq "4") 
			{
				cls
				Write-Host
				Write-Host " ###########################################################################"
				Write-Host " #                                                                         #" 
				Write-Host " #                        Systeminformationen                              #"
				Write-Host " #                                                                         #" 
				Write-Host " ###########################################################################"
				Write-Host
				Write-Host
				Write-Host "----------------------------------------------------------------------------"
				# Wert für Zeitserver IP-Telefone
				if (Test-Path "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options\PhoneConfig") 
					{$timeiptel=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options\PhoneConfig").GetValue("sntp-addr")
					if ($timeiptel -eq " ")	{$timeiptel = 'nicht gesetzt'}
					else {$timeiptel = $timeiptel}}
				else {$timeiptel = 'nicht gesetzt'}
				
				# Auto Firmware Update IP Tel
				$autofwupdate=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options").GetValue("AutoFirmwareUpdate")
				if ($autofwupdate -eq 1) 
					{ $autofwupdate = 'ein' }
				else { $autofwupdate = 'aus' }
				
				# Pickup bei aktivem Gespräch und gesperrtem Zweitanruf
				$notiyon2call=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options").GetValue("CallNotificationOn2ndCallDisabled")
				if ($notiyon2call -eq 1) 
					{ $notiyon2call = 'ein' }
				else { $notiyon2call = 'aus' }
				
				# Gruppenruf bei nicht stören
				$groupdnd=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options").GetValue("SkipGroupCallMembersWithActiveDoNotDisturb")
				if ($groupdnd -eq 1) {
					$groupdnd = 'ein' }
				else { $groupdnd = 'aus' }

				# Gruppenruf bei nicht abwesend
				$groupaway=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options").GetValue("SkipGroupCallMembersWithActiveAway")
				if ($groupaway -eq 1) {
					$groupaway = 'ein' }
				else { $groupaway = 'aus' }

				# Gruppenruf in Anruferliste aus
				$groupcallinlist=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options").GetValue("WritePhoneCallListEntryOnGroupCall")
				if ($groupcallinlist -eq 1) {
					$groupcallinlist = 'ein' }
				else { $groupcallinlist = 'aus' }

				# Media Bridge
				$mediabridge=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxSrv\CurrentVersion\Options").GetValue("EnableTrunkCallEarlyMedia")
				if ($mediabridge -eq 1) {
					$mediabridge = 'ein' }
				else { $mediabridge = 'aus' }

				# Zeit Wiederanruf
				$wiederanruf=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\PhoneMgr\CurrentVersion\Options").GetValue("TransferringStateTimeout")
				if (!$wiederanruf) {
					$wiederanruf = 'Key nicht gesetzt' }

					# IMAP Abfragemechanismus
				if (Test-Path "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options") {
				$fetchvmonly=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options").GetValue("FetchOnlyVoicemails")
				if ($fetchvmonly -eq 1) {
					$fetchvmonly = 'ein' }
				else { $fetchvmonly = 'aus' }
				}
				else {$fetchvmonly = 'nicht gesetzt' }

				# IMAP Login Plain
				if (Test-Path "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options") {
				$vmplain=(get-item "HKLM:SOFTWARE\Wow6432Node\$BACKUPPATH\IpPbxIMAP4\CurrentVersion\Options").GetValue("UseAuthenticatePlain")
				if ($vmplain -eq 1) {
					$vmplain = 'Plain' }
				else { $vmplain = 'Login' }
				}
				else {$vmplain = 'nicht gesetzt' }

				# "Terminsalserver: 2 Sitzung erlauben (RDP)
				$rdp=(get-item "HKLM:SYSTEM\CurrentControlSet\Control\Terminal Server").GetValue("fSingleSessionPerUser")
				if ($rdp -eq 0) {
					$rdp = 'ein' }
				else { $rdp = 'aus' }

				Write-Host -NoNewline " Zeitserver für IP-Telefone:                               "
				Write-Host -ForeGroundColor Yellow "$timeiptel"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Auto Firmware Update IP Telefone:                         "
				Write-Host -ForeGroundColor Yellow "$autofwupdate"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Pickup bei aktivem Gespräch und gesperrtem Zweitanruf:    "
				Write-Host -ForeGroundColor Yellow "$notiyon2call"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Gruppenruf bei nicht stören:                              "
				Write-Host -ForeGroundColor Yellow "$groupdnd"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Gruppenruf bei abwesend:                                  "
				Write-Host -ForeGroundColor Yellow "$groupaway"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Gruppenruf in Anruferliste:                               "
				Write-Host -ForeGroundColor Yellow "$groupcallinlist"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Media Bridge:                                             "
				Write-Host -ForeGroundColor Yellow "$mediabridge"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Zeit in Sekunden bis Wiederanruf:                         "
				Write-Host -ForeGroundColor Yellow "$wiederanruf"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " IMAP Abfragemechanismus (Fetch only VoiceMails):          "
				Write-Host -ForeGroundColor Yellow "$fetchvmonly"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " IMAP Login Verhalten (Plain/Login):                       "
				Write-Host -ForeGroundColor Yellow "$vmplain"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host -NoNewline " Terminsalserver: 2 Sitzung erlauben:                      "
				Write-Host -ForeGroundColor Yellow "$rdp"
				Write-Host "----------------------------------------------------------------------------"
				Write-Host
				Write-Host
				pause
				function9
			}


		if ($answer9 -eq "5")
			{
				cls
				Write-Host
				Write-Host " ###########################################################################"
				Write-Host " #                                                                         #" 
				Write-Host " #                        Portstatus Remote Connector                      #"
				Write-Host " #                                                                         #" 
				Write-Host " ###########################################################################"
				Write-Host
				Write-Host
				Write-Host "----------------------------------------------------------------------------"

				$ComputerName = $env:computername
				$Ports = (9101, 16203)
				foreach ($Computer in $ComputerName) 
					{
						Write-Host  
						foreach ($Port in $Ports) 
							{
							
								# Create a Net.Sockets.TcpClient object to use for
								# checking for open TCP ports.
								$Socket = New-Object Net.Sockets.TcpClient
								
								# Suppress error messages
								$ErrorActionPreference = 'SilentlyContinue'
								
								# Try to connect
								$Socket.Connect($Computer, $Port)
								
								# Make error messages visible again
								$ErrorActionPreference = 'Continue'
								
								# Determine if we are connected.
								if ($Socket.Connected) 
									{
										Write-Host "----------------------------------------------------------------------------"
										Write-Host -ForegroundColor green " ${Computer}: Port $Port is offen."
										Write-Host "----------------------------------------------------------------------------"
										$Socket.Close()
									}
								else 
									{
										Write-Host "----------------------------------------------------------------------------"
										Write-Host -ForegroundColor red " ${Computer}: Port $Port ist geschlossen oder geblockt!"
										Write-Host "----------------------------------------------------------------------------"
									}
							
								# Apparently resetting the variable between iterations is necessary.
								$Socket.Dispose()
								$Socket = $null
								
							}
						Write-Host  
					}

				Write-Host
				Write-Host
				pause
				function9
			}
			
		if ($answer9 -eq "6")
			{
				cls
				Write-Host
				Write-Host " ##################################################################################"
				Write-Host " #                                                                                #" 
				Write-Host " #  Windows Lizenzkey auslesen und als Windows_Key.txt auf dem Desktop speichern. #"
				Write-Host " #                                                                                #" 
				Write-Host " ##################################################################################"
				Write-Host
				Write-Host
				Function GetWinKey 
					{ 
						$Hklm = 2147483650
						$Target = $env:COMPUTERNAME
						$RegPath = "Software\Microsoft\Windows NT\CurrentVersion"
						$DigitalID = "DigitalProductId"
						$Wmi = [WMIClass]"\\$Target\root\default:stdRegProv"
						$Object = $Wmi.GetBinaryValue($Hklm,$RegPath,$DigitalID)
						[Array]$DigitalIDvalue = $Object.uValue
						$ProductName = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "ProductName").ProductName
						$CurrentBuild = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "CurrentBuild").CurrentBuild
						$CurrentVersion = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "CurrentVersion").CurrentVersion
						$PROCESSOR_ARCHITECTURE = (Get-itemproperty -Path "HKLM:SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "PROCESSOR_ARCHITECTURE").PROCESSOR_ARCHITECTURE
						$RegisteredOwner = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "RegisteredOwner").RegisteredOwner
						$USERDOMAIN = (Get-itemproperty -Path "HKCU:Volatile Environment" -Name "USERDOMAIN").USERDOMAIN
						$ProductID = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "ProductId").ProductId
						$DigiID = ConvertTokey $DigitalIDvalue
						$OSInfo = (Get-WmiObject "Win32_OperatingSystem" | Select Caption).Caption
						$CSDVersion = ""
						If($PROCESSOR_ARCHITECTURE -eq "x86")
						{
							$OsType = "32 Bit"
						}
						Elseif($PROCESSOR_ARCHITECTURE -eq "AMD64")
						{
						$OsType = "64 Bit"
						}
						If($CurrentVersion -eq 6.1)
						{
						$CSDVersion = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "CSDVersion").CSDVersion
						}
						[string]$Value = "Infos zum Betriebssystem: `r`n" `
						+ "Windows-Edition       : $ProductName $OsType $CSDVersion `r`n" `
						+ "Windows-Build-ID      : $CurrentBuild `r`n" `
						+ "Windows-Versions-ID   : $CurrentVersion `r`n" `
						+ "Prozessor-Architektur : $PROCESSOR_ARCHITECTURE `r`n" `
						+ "Produkt-ID            : $ProductID `r`n" `
						+ "Windows-ProduktKey    : $DigiID `r`n`r`n" `
						+ "Registrierter Benutzer: $RegisteredOwner `r`n" `
						+ "Computername          : $USERDOMAIN `r`n"
						$Value
						$Txtpath = "."
						If($CurrentVersion -ge 6.1)
						{
						New-Item -Path $HOME\Desktop -Name "Windows_Key.txt" -Value $Value -ItemType File -Force | Out-Null
						}
					}

					Function ConvertToKey($Key)
						{
							$Keyoffset = 52
							$IsWin8 = [int]($Key[66]/6) -band 1
							$HF7 = 0xF7
							$Key[66] = ($Key[66] -band $HF7) -bOr (($IsWin8 -band 2) * 4)
							$i = 24
							[String]$Chars = "BCDFGHJKMPQRTVWXY2346789"
							Do
							{
							$Cur = 0
							$X = 14
							Do
							{
							$Cur = $Cur * 256
							$Cur = $Key[$X + $Keyoffset] + $Cur
							$Key[$X + $Keyoffset] = [math]::Floor([double]($Cur/24))
							$Cur = $Cur % 24
							$X = $X – 1
							}While($X -ge 0)
							$i = $i- 1
							$KeyOutput = $Chars.SubString($Cur,1) + $KeyOutput
							$Last = $Cur
							}While($i -ge 0)
							$Keypart1 = $KeyOutput.SubString(1,$Last)
							$Keypart2 = $KeyOutput.Substring(1,$KeyOutput.length-1)

							If($Last -eq 0 )
							{
							$KeyOutput = "N" + $Keypart2
							}
							Else
							{
							$KeyOutput = $Keypart2.Insert($Keypart2.IndexOf($Keypart1)+$Keypart1.length,"N")
							}

							$KeyProduct = ""
							For ($i = 0; $i -le 24; $i++) 
							{
							  $KeyProduct = $KeyProduct + $KeyOutput[$i] 
							  If ((($i+1) % 5 -eq 0) -and ($i -ne 0) -and ($i -le 20) ) 
								{
								 $KeyProduct = $KeyProduct + "-"
								}
							}
							$KeyProduct
						}

				$CurrentVersion = (Get-itemproperty -Path "HKLM:Software\Microsoft\Windows NT\CurrentVersion" -Name "CurrentVersion").CurrentVersion

				If($CurrentVersion -le 6.0)
					{
						$map="BCDFGHJKMPQRTVWXY2346789"
						$value = (get-itemproperty "HKLM:\\SOFTWARE\Microsoft\Windows NT\CurrentVersion").digitalproductid[0x34..0x42]
						$ProductKey = ""
						for ($i = 24; $i -ge 0; $i--) 
							{
								 $r = 0
								 for ($j = 14; $j -ge 0; $j--) 
									{
										$r = ($r * 256) -bxor $value[$j]
										$value[$j] = [math]::Floor([double]($r/24))
										$r = $r % 24
									}
								$ProductKey = $map[$r] + $ProductKey
								if (($i % 5) -eq 0 -and $i -ne 0) 
									{
										$ProductKey = "-" + $ProductKey
									}
							}
						Write-Host
						Write-Host -foregroundcolor yellow $ProductKey
						Write-Host
						pause
						function9 
					}

				else 
					{
						GetWinKey
						Write-Host
						Write-host -ForegroundColor green "`r`nAlle Angaben sind in der Datei Windows_Key.txt auf dem Desktop enthalten. `r`n" 
						Write-Host
						sleep 1
						notepad.exe $HOME\Desktop\Windows_Key.txt
						pause

						function9
					}
			}
			
		if ($answer9 -eq "7")
			{
				cls
				Write-Host
				Write-Host " #################################################"
				Write-Host " #                                               #" 
				Write-Host " #  Installierte SwyxWare Version auslesen.      #"
				Write-Host " #                                               #" 
				Write-Host " #################################################"
				Write-Host
				Write-Host
				$VERSION = Get-IpPbxVersionInfo | ForEach-Object {$_.m_sProdVersion}
				$DATUM = Get-IpPbxVersionInfo | ForEach-Object {$_.m_sInstallDate}
				Write-Host
				switch ($VERSION)
				   {
						"11.00.2821.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 11.00"}
						"11.00.2856.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 11.00.1.0"}
						"10.20.1741.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015"}
						"10.20.1812.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R2"}
						"10.30.2092.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R3"}
						"10.30.2114.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R3.1"}
						"10.30.2155.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R3.2"}
						"10.30.2274.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R3.2.2"}
						"10.30.2429.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R30.5.0"}
						"10.40.2513.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R40.0.0"}
						"10.40.2540.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R40.1.0"}
						"10.40.2588.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R40.1.1"}
						"10.40.2685.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R40.2.0"}
						"10.40.2694.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2015 R40.3.0"}
						"9.00.1268.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2013"}
						"9.10.1362.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2013 R2"}
						"9.20.1440.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2013 R3"}
						"9.30.1544.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2013 R4"}
						"9.40.1635.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2013 R5"}
						"9.50.1810.0" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2013 R6"}
						"8.00.0842" {Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2011"}
						"8.01.0678"	{Write-Host " Die installierte Version lautet:`r`n`r`n SwyxWare 2011 R2"}
						"8.02.0882"	{Write-Host " Die installierte Version lautet:`r`n`r`n SwyxIt! 2011 R2 Maintenance Pack 1"}
						"8.02.0994"	{Write-Host "Die installierte Version lautet:`r`n`r`n SwyxIt! 2011 R2 Maintenance Pack 2 "}
						default {Write-Host "Die installierte Version ist unbekannt"}
				}
	
				Write-Host
				Write-Host
				Write-Host
				Read-Host "Weiter mit beliebiger Taste..."
				function9
			}

		if ($answer9 -eq "8")
			{
				cls
				Write-Host
				Write-Host " #################################################"
				Write-Host " #                                               #" 
				Write-Host " #  Benutzerlizenzen und Lizenzstatus anzeigen.  #"
				Write-Host " #                                               #" 
				Write-Host " #################################################"
				Write-Host
				Write-Host
				Write-Host
				$hr = 0
				"Lizensierte User   = " + $Global:AdminFacade.GetTotalLicenseSummary([ref]$hr).EffectiveTotalUsers
				Write-Host
				"Konfigurierte User = " + (Get-IpPbxUser | where { $_.Locked -eq $false -and $_.ConferenceUser -eq $false }).count
				Write-Host
				"Angemeldet User    = " + ((Get-Counter "\\LOCALHOST\\SwyxServer\Logged in users").CounterSamples[0].CookedValue)
				Write-Host
				Write-Host
				Write-Host
				Read-Host "Weiter mit beliebiger Taste..."
				function9			
			}

		if ($answer9 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function9	  
			}
	}	

#################################################################################

function function10 
	{
		cls
		Write-Host
		Write-Host " ###########################################################################"
		Write-Host " #                                                                         #" 
		Write-Host " #  Client Zertifikate erstellen / löschen (Remote Connector)              #"
		Write-Host " #                                                                         #" 
		Write-Host " ###########################################################################"
		Write-Host
		Write-Host "  1. Client Zertifikat für Mitglieder einer Gruppe erstellen."
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  2. Client Zertifikat für Mitglieder einer Gruppe löschen"
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ---------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer10 = Read-Host
		if ($answer10 -eq "1")
			{			
				######### Beginn der hier benötigten Funktionen######################
				function getpassword 
					{
						Write-Host
						Write-Host -ForeGroundColor Green " abbrechen mit q:"
						Write-Host
						Write-Host -ForegroundColor Green " Bitte das Master Passwort des Stammzertifikates eingeben. :> " -NoNewline
						$password = Read-Host
						Write-Host
						if ($password -eq "q") {function10} 
						else 
							{
								Write-Host -NoNewline -ForegroundColor Green " Es wurde folgendes Passwort eingegeben: "
								Write-Host -NoNewLine -ForegroundColor Yellow "$password"
								Write-Host -NoNewLine -ForegroundColor Green " ,ist das richtig? j/q :> "
								$richtig = Read-Host
								
								if ($richtig -ne "j") {function10}
								if ($richtig -eq "j") {write_certificates}
							}

					}						

						function write_certificates 
							{
								Write-Host
								# Zertifikatepasswort umwandeln von Klartext in verschlüsselten String
								$RootPassword = (ConvertTo-SecureString -String "$password" -AsPlainText -Force)
								Get-IpPbxGroupMember -GroupName $gruppenauswahl | ForEach-Object { 
									
									$userEntry = $_
									# Status Output
									Write-Host "Schreibe neues Zertifikat für '$($userEntry.Name)...."
									New-IpPbxClientCertificate -UserEntry $userEntry -RootPassword $RootPassword -Confirm:$false -ErrorAction Stop
									Write-Host
									}

										Write-Host
									Write-Host -ForegroundColor Green " ...fertig."
									Write-Host
									pause
									function10
							}
	
				######### Ende der hier benötigten Funktionen######################

				Write-Host
				Write-Host " Hier können Zertifikate für die User einer Gruppe erstellt werden."
				Write-Host " Die Gruppe kann ausgewählt oder eine neue Gruppe erstellt werden."
				Write-Host 
				Write-Host " Das Master Passwort des Stammzertifikates wird im Verlauf abgefragt."
				Write-Host
				Write-Host -ForegroundColor Green " Es existieren zurzeit folgende NetPhone Gruppen:" 
				Write-Host
				Write-Host
				$gruppen = Get-IpPbxGroup
				$i=0
				Foreach ($gruppe in $gruppen) 
					{
						Write-Host
						Write-Host -ForegroundColor Yellow  " $i" -  $gruppe.Name
						Write-Host
						$i=$i+1
					}
				Write-Host
				$group = Get-IpPbxGroup -GroupName "Zertifikat" 
				if (!$group) 
					{
						Write-Host -ForegroundColor Yellow " $i - Neue Gruppe 'Zertifikat' erstellen"
						Write-Host
					} 
				else { $i=$i-1 }
				Write-Host 
				Write-Host -ForegroundColor Green "   abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte eine Auswahl treffen (0 - $i):> " -NoNewline
				$auswahl = Read-Host
				if ($auswahl -eq "q") {function10}
				if ($auswahl -eq "$i") 
					{	
						Write-Host 
						Write-Host -NoNewline -ForegroundColor Green " Es wurde folgende Auswahl getroffen: "
						Write-Host -NoNewLine -ForegroundColor Yellow "Zertifikat"
						Write-Host -NoNewLine -ForegroundColor Green " ist das richtig? j/q :> "
						$richtig = Read-Host
						 
						 if ($richtig -ne "j") {function10}
						 if ($richtig -eq "j") 
							{
								 $group = Get-IpPbxGroup -GroupName "Zertifikat" 
								 if ($group -ne "Zertifikat") {
								 New-IpPbxGroup -Comment "Angelegt von OpenAdmin" -GroupName "Zertifikat" | Add-IpPbxGroup
							}
							Write-Host
							Write-Host -ForeGroundColor Yellow " Neue Gruppe Zertifikat angelegt, bitte die User in die Gruppe schieben."
							Write-Host							
							Write-Host -ForeGroundColor Yellow " Wenn fertig, ENTER drücken.."
							Write-Host
							Write-Host
							pause
							$gruppenauswahl = "Zertifikat"
							getpassword}
					}
						

					if ($auswahl -le "$i") 
						{
							Write-Host 
							Write-Host -NoNewline -ForegroundColor Green " Es wurde folgende Auswahl getroffen: "
							Write-Host -NoNewLine -ForegroundColor Yellow $($gruppen[$auswahl].name)
							Write-Host -NoNewLine -ForegroundColor Green "  ist das richtig? j/q :> " 
							$richtig = Read-Host
							
							if ($richtig -ne "j") {function10}
							if ($richtig -eq "j") 
								{
									$gruppenauswahl = $($gruppen[$auswahl].name)
									getpassword
								}
						}
					else 
						{
							write-host -ForegroundColor red {" Falsche Eingabe."}
							sleep 2
							function10	  
						}						
			}
	
		if ($answer10 -eq "2")
			{
				function del_certificates 
					{
						Write-Host
						Get-IpPbxGroupMember -GroupName $gruppenauswahl | ForEach-Object { 
						Write-Host
						$userEntry = $_
						# Status Output
						Write-Host "Lösche Zertifikat für '$($userEntry.Name)...."
						Remove-IpPbxClientCertificate -UserEntry $userEntry -Confirm:$false -ErrorAction Stop
						Write-Host
						}
					
						Write-Host
						Write-Host -ForegroundColor Green " ...fertig."
						Write-Host
						sleep 3
						function10
					}

				Write-Host
				Write-Host " Hier können Zertifikate für die User einer Gruppe gelöscht werden."
				Write-Host " Die Gruppe kann ausgewählt werden."
				Write-Host 
				Write-Host
				Write-Host -ForegroundColor Green " Es existieren zurzeit folgende NetPhone Gruppen:" 
				Write-Host
				Write-Host
				$gruppen = Get-IpPbxGroup
				$i=0
				Foreach ($gruppe in $gruppen) 
					{
						Write-Host
						Write-Host -ForegroundColor Yellow  " $i" -  $gruppe.Name
						Write-Host
						$i=$i+1
					}
				Write-Host
				$i=$i-1 
				Write-Host 
				Write-Host -ForegroundColor Green "   abbrechen mit q:"
				Write-Host
				Write-Host -ForegroundColor Green " Bitte eine Auswahl treffen (0 - $i):> " -NoNewline
				$auswahl = Read-Host

					if ($auswahl -eq "q") {function10}
					if ($auswahl -le "$i") 
						{
							Write-Host 
							 Write-Host -NoNewline -ForegroundColor Green " Es wurde folgende Auswahl getroffen: "
							 Write-Host -NoNewLine -ForegroundColor Yellow $($gruppen[$auswahl].name)
							 Write-Host -NoNewLine -ForegroundColor Green " ,ist das richtig? j/q :> " 
							$richtig = Read-Host
							
							if ($richtig -ne "j") {function10}
							if ($richtig -eq "j") 
								{
									$gruppenauswahl = $($gruppen[$auswahl].name)
									del_certificates
								}
						}
					else 
						{
							write-host -ForegroundColor red {" Falsche Eingabe."}
							sleep 2
							function10	  
						}
			}
	
		if ($answer10 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function10	  
			}
	}

#################################################################################

function function11
	{
		cls
		Write-Host
		Write-Host " #################################################################################"
		Write-Host " #                                                                               #" 
		Write-Host " #  FaxClient Einstellungen (Konfig-Gruppe)                                      #"
		Write-Host " #                                                                               #" 
		Write-Host " #################################################################################"
		Write-Host
		Write-Host " Im FaxClient werden die Einstellungen Faxstation-ID, Firma, Anschrift, Name,  "
		Write-Host " E-Mail, Telefon und Fax soweit vorhanden eingetragen. "
		Write-Host
		Write-Host "  1. FaxClient Einstellungen bearbeiten."
		Write-Host " ---------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ---------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer11 = Read-Host
	
		if ($answer11 -eq "1")
			{ 
				Write-Host
				Write-Host
				Write-Host "   abbrechen mit  q:"
				Write-Host
				Write-Host -NoNewline " Beispiel: "
				Write-Host -ForeGroundColor Yellow "Firma XYZ. "
				Write-Host
				Write-Host -ForegroundColor Green " Bitte den Namen der Firma eingeben oder ENTER für 'keine Firma':> " -NoNewline
				$Firma = Read-Host
				if ($Firma -eq "q") {mainmenu}
				Write-Host 
				Write-Host
				Write-Host "   abbrechen mit  q:"
				Write-Host
				Write-Host -NoNewline " Beispiel: "
				Write-Host -ForeGroundColor Yellow "Teststr. 12, 12345 Musterstadt "
				Write-Host
				Write-Host -ForegroundColor Green " Bitte die Anschrift der Firma eingeben oder ENTER für 'keine Anschrift' :> " -NoNewline
				$Anschrift = Read-Host
				if ($Anschrift -eq "q") {mainmenu}

 
				## Faxdaten schreiben
				$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
				Foreach ($Member in $Members) 
					{
						Write-Host -ForeGroundColor Green -Nonewline "Schreibe Faxdaten für User "
						Write-Host $Member.Name
						$FaxData = Get-IpPbxFaxClientConfig -UserName $Member.Name
						$UserData = Get-IpPbxUser -UserID $FaxData.UserID -AddBuiltInUser -ReadOnly

						$FaxData.Fax = $UserData.PublicFaxNumbers
						$FaxData.StationID = $UserData.PublicFaxNumbers
						$FaxData.Company = $Firma
						$FaxData.Address = $Anschrift
					#	$FaxData.Department = $Abteilung
						$FaxData.Name = $member.Name
						$FaxData.Email = $member.EMailAddr
						$FaxData.Phone = $UserData.PublicNumbers
						
						Set-IpPbxFaxClientConfig -ConfigData $FaxData
					}

				Write-Host
				Write-Host -ForeGroundColor Green " Fertig."
				Write-Host
				Write-Host
				pause
				mainmenu
			}

		if ($answer11 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function11	  
			}
	
	}

#################################################################################

function function12 
	{
		cls
		Write-Host
		Write-Host " ##############################################################################"
		Write-Host " #                                                                            #" 
		Write-Host " #  Windows Features installieren                                             #"
		Write-Host " #                                                                            #" 
		Write-Host " ##############################################################################"
		Write-Host
		Write-Host "  1. Windows FTP Server installieren und konfigurieren "
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  2. Aktuelle Firmware herunterladen und im FTP Verzeichniss ablegen  "
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  3. Telnet Client instellieren "
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer12 = Read-Host
		
		if ($answer12 -eq "1") 
			{
				cls
				Write-Host
				Write-Host " #################################################################################"
				Write-Host " #                                                                               #" 
				Write-Host " #  Windows FTP Server installieren und konfigurieren                            #"
				Write-Host " #                                                                               #" 
				Write-Host " #################################################################################"
				Write-Host
				Write-Host "  Mit der Funktion wird der Windows FTP-Server installiert und konfiguriert."
				Write-Host "  Das FTP Verzeichniss ist C:\inetpub\ftproot (Windows Standard)."
				Write-Host "  Als Username und Passwort ist jeweils 'anonymous' eingestellt."
				Write-Host
				Write-Host "  1. FTP Server installieren."
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  0. zurück."  
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host
				Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
				$answer = Read-Host
				
				if ($answer -eq "1")
					{ 
						# Variablen
						$appPoolName = "SwyxPool" 
						$ftpSiteTitle = "SwyxPhoneFirmware"
						$folderPath = "C:\inetpub\ftproot"
						# FTP Server installieren
						Write-Host
						Write-Host -ForeGroundColor Green " FTP Server wird installiert. "
						Write-Host
						Write-Host -ForeGroundColor Green " Prüfe ob FTP Server bereits installiert ist... "
						$ftpService = Get-WindowsFeature Web-Ftp-Server | Select -Expand Installed
						if (!$ftpService -match “True”)
							{
								Write-Host " FTP Server ist noch nicht installiert."
								Write-Host " Installiere FTP Server..." 
										
								Add-WindowsFeature Web-FTP-Server
								Write-Host
								Write-Host -ForeGroundColor Green " Web Management Console wird installiert. "
								Write-Host
								Add-WindowsFeature  Web-Mgmt-Console
								Write-Host
								Write-Host -ForeGroundColor Green " Module laden falls schon vorhanden."
								Import-Module WebAdministration -EA SilentlyContinue

								# Ausgabe unterdrücken
								$ErrorActionPreference = "SilentlyContinue"

								# ftp site creation
								$ftpprotocol = "ftp"
								$bindingInformation = "*:21:"
								$bindings = '@{protocol="' + $ftpprotocol + '";bindingInformation="'+ $bindingInformation +'"}'

								Write-Host
								Write-Host -NoNewline -ForeGroundColor Green " Erzeuge Anwendungspool: $appPoolName"
								Write-Host
								New-Item IIS:AppPools\$appPoolName -Verbose:$false -force -EA SilentlyContinue
								sleep 1
								Write-Host
								Write-Host -ForeGroundColor Green " Erzeuge FTP Seite: $ftpSiteTitle"
								Write-Host
								# Create the folder if it doesnt exist.
								Write-Host -ForeGroundColor Green " Verzeichniss $folderPath erstellen falls nicht vorhanden."
								if(!(Test-Path "$folderPath"))
									{
										New-Item $folderPath -itemType directory
									}

								Write-Host
								Write-Host -ForeGroundColor Green " Anonymous Login konfigurieren." 
								New-Item IIS:Sites\$ftpSiteTitle -bindings $bindings -physicalPath $folderPath -Verbose:$false -force -EA SilentlyContinue 
								Set-ItemProperty IIS:Sites\$ftpSiteTitle -Name applicationPool -Value $appPoolName -EA SilentlyContinue 
								sleep 1
								Set-ItemProperty IIS:Sites\$ftpSiteTitle -Name ftpServer.security.authentication.basicAuthentication.enabled -Value $true -EA SilentlyContinue
								sleep 1
								Set-ItemProperty IIS:Sites\$ftpSiteTitle -Name ftpServer.security.authentication.anonymousAuthentication.enabled -Value $true -EA SilentlyContinue
								sleep 1
								Set-ItemProperty IIS:Sites\$ftpSiteTitle -Name ftpServer.security.ssl.controlChannelPolicy -Value 0 -EA SilentlyContinue
								sleep 1
								Set-ItemProperty IIS:Sites\$ftpSiteTitle -Name ftpServer.security.ssl.dataChannelPolicy -Value 0 -EA SilentlyContinue
								sleep 1
								Set-ItemProperty IIS:AppPools\$appPoolName managedRuntimeVersion v4.0  -EA SilentlyContinue

								#Set the permissions...
								Write-Host
								Write-Host -ForeGroundColor Green " Rechte werden gesetzt."
								sleep 1
								Add-WebConfiguration -Filter /System.FtpServer/Security/Authorization -Value (@{AccessType="Allow";Users="?"; Permissions="Read"}) -PSPath IIS: -Location "$ftpSiteTitle" -EA SilentlyContinue
								Write-Host
								Write-Host -Foregroundcolor Green " Alles erledigt, FTP Server installiert und konfiguriert."
								Write-Host
								Write-Host
								pause
								function12
							}
						else 
							{
								Write-Host
								Write-Host -Foregroundcolor Yellow " FTP Server ist berits installiert!"
								Write-Host
								pause
								function12
							}	
					}

				if ($answer -eq "0") {function12}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."}
						sleep 2
						function12	  
					}
			}
	
		if ($answer12 -eq "2") 
			{
				cls
				Write-Host
				Write-Host " #################################################################################"
				Write-Host " #                                                                               #" 
				Write-Host " #  Aktuelle Firmware herunterladen und im FTP Verzeichniss ablegen              #"
				Write-Host " #                                                                               #" 
				Write-Host " #################################################################################"
				Write-Host
				Write-Host " Die aktuelle Firmware wird bei Swyx per FTP abgeholt und im Verzeichniss"
				Write-Host " C:\inetpup\ftproot abgelegt. Die PhoneWhitelist wird ebenfalls heruntergeladen"
				Write-Host " und installiert."
				Write-Host
				Write-Host "  1. Firmware und Whitelist downloaden."
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  0. zurück."  
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host
				Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
				$answer = Read-Host

				if ($answer -eq "1")
					{ 
						# Variablen 
						$ftpServer = "ftp.swyx.de"
						$ftpFolder = "/fw11/"
						$username = "anonymous"
						$password = "anonymous"
						$folderPath = "C:\inetpub\ftproot"

						# Teste Netzwerk
						Write-Host
						Write-Host -NoNewline -ForeGroundColor Green " Teste Internetverbindung..."
						$ping = Test-Connection -Computername ftp.swyw.de -EA SilentlyContinue
						if (-Not $ping)
							{ 
								Write-Host
								Write-Host
								Write-Host -ForeGroundColor Red " Keine Namensauflösung oder kein Netzwerk. Abbruch! " 
								Write-Host
								pause 
								break
							} 
						else {Write-Host -ForeGroundColor Green " OK."}
						Write-Host
						Write-Host -NoNewline -ForeGroundColor Green " Teste FTP Verbindung..."
						[System.Net.FtpWebRequest]$ftp = [System.Net.WebRequest]::Create("ftp://ftp.swyx.de/fw10/") 
						$ftp.Method = [System.Net.WebRequestMethods+FTP]::ListDirectoryDetails #Details
						$response = $ftp.getresponse() 
						$stream = $response.getresponsestream() 

						$buffer = new-object System.Byte[] 1024 
						$encoding = new-object System.Text.AsciiEncoding 

						$outputBuffer = "" 
						$foundMore = $false 

						## Read all the data available from the stream, writing it to the 
						## output buffer when done. 
						do 
						{ 
							## Allow data to buffer for a bit 
							start-sleep -m 1000 

							## Read what data is available 
							$foundmore = $false 
							$stream.ReadTimeout = 1000

							do 
							{ 
								try 
									{ 
										$read = $stream.Read($buffer, 0, 1024) 

										if($read -gt 0) 
											{ 
												$foundmore = $true 
												$outputBuffer += ($encoding.GetString($buffer, 0, $read)) 
											} 
									}	 
								catch 
									{
										$foundMore = $false; $read = 0 
									} 
							} 
							while($read -gt 0) 
						}

						while($foundmore)
						if ($outbuffer -eq "")
							{ 
								Write-Host
								Write-Host -ForeGroundColor RED "Keine Dateien empfangen. Fehler im Netzwerk! (Externe Firewall??)"
								Write-Host
								pause
								break 
							}
						Write-Host
						Write-Host
						$outputBuffer
						Write-Host
						Write-Host -ForeGroundColor Green " OK.  Weiter geht es....."
						Write-Host

						Write-Host
						# Create the folder if it doesnt exist.
						Write-Host -ForeGroundColor Green " Verzeichniss $folderPath erstellen falls nicht vorhanden."
						if(!(Test-Path "$folderPath")) 
							{
								New-Item $folderPath -itemType directory
							}
						# Firewall auschalten
						Write-Host
						Write-Host -ForeGroundColor Green -NoNewline " Firewall für den Download abschalten... "
						netsh advfirewall set allprofiles state off

						# Per FTP die aktuelle Telefonfirmware und die PhoneWhitelist abholen und in userem FTP Server ablegen
						Write-Host
						Write-Host -ForeGroundColor Green " Per FTP die aktuelle Telefonfirmware und die PhoneWhitelist"
						Write-Host -ForeGroundColor Green " abholen und in userem FTP Server ablegen..."
						cd $home
						"open $ftpServer
						anonymous
						anonymous@telekom.de
						CD $FTPFolder
						lcd $folderpath
						binary
						mget *.img *.bmp *.png
						cd ..
						cd phonewhitelist
						get PhoneWhitelist.msi
						Disconnect
						 Quit" | Add-Content ".\FTP.s" 

						ftp.exe -i -s:".\FTP.s"

						# Test ob Dateien geladen werden konnten (Passives FTP)
						if (Test-Path $folderpath\PhoneWhitelist.msi) 
							{
								# PhoneWhitelist.msi installieren
								Write-Host
								Write-Host -ForeGroundColor Green " PhoneWhitelist wird installiert..."
								Start-Process $folderpath\PhoneWhitelist.msi
								cd..

								# Firewall wieder einschalten
								Write-Host
								Write-Host -ForeGroundColor Green -NoNewline " Firewall jetzt wieder einschalten... "
								netsh advfirewall set allprofiles state on
								cd $home
								Remove-Item ".\FTP.s"
								Write-Host
								Write-Host
								Write-Host -Foregroundcolor Green " Alles erledigt, Firmware heruntergeladen und Whitelist installiert."
								Write-Host
								write-host
								pause
								function12
							}
					}
				if ($answer -eq "0"){function12}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."}
						sleep 2
						function12	  
					}
			}
			
		if ($answer12 -eq 3) 
			{   
				cls
				Write-Host
				Write-Host " #################################################################################"
				Write-Host " #                                                                               #" 
				Write-Host " #  Telnet Client instellieren                                                   #"
				Write-Host " #                                                                               #" 
				Write-Host " #################################################################################"
				Write-Host
				Write-Host
				Write-Host "  1. Telnet Client installieren."
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  0. zurück."  
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host
				Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
				$answer = Read-Host
				if ($answer -eq "1")
					{
						Write-Host
						Write-Host -ForeGroundColor Green " Telnet Client wird installiert. "
						Write-Host
						if ($OSNAME -eq "Server2012") {	Install-WindowsFeature Telnet-Client }
						if ($OSNAME -eq "Server2008") {	Add-WindowsFeature Telnet-Client }
						Write-Host
						Write-Host -ForeGroundColor Green "Fertig. Telnet Client ist installiert."
						Write-Host
						sleep 3
						function12
					}
				if ($answer -eq "0") {function12}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."}
						sleep 2
						function12	  
					}
			}

		if ($answer12 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function12	  
			}
	}

#################################################################################

function function13
	{  
		cls
		Write-Host
		Write-Host " ##############################################################################"
		Write-Host " #                                                                            #" 
		Write-Host " #  Leitungstasten kopieren oder löschen (Konfig-Gruppe)                      #"
		Write-Host " #                                                                            #" 
		Write-Host " ##############################################################################"
		Write-Host
		Write-Host "  1. Leitungstasten von einem Musteruser kopieren  "
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  2. Inhalte der Leitungstasten löschen und Anzahl auf 3 zurücksetzen  "
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer13 = Read-Host

		if ($answer13 -eq 1) 
			{ 
				cls
				Write-Host
				Write-Host " #################################################################################"
				Write-Host " #                                                                               #" 
				Write-Host " #  Leitungstasten von einem Musteruser kopieren (Konfig-Gruppe)                 #"
				Write-Host " #                                                                               #" 
				Write-Host " #################################################################################"
				Write-Host
				Write-Host "  Kopiert die Anzahl der Leitungstasten und deren Einstellungen vom MusterUser"
				Write-Host "  auf alle Mitglieder der Konfig-Gruppe und ersetzt die 'gehende Rufnummer'"
				Write-Host "  des MusterUsers gegen die des Users."
				Write-Host
				Write-Host "  Die Rufnummer des Musterusers wird im Script abgefragt."
				Write-Host
				Write-Host
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  1. Leitungstasten kopieren."
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  0. zurück."  
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host
				Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
				$answer = Read-Host

				if ($answer -eq "0"){function13}
				if ($answer -eq "1")
					{
						# Wenn das Script mehrmals aufgerufen wird müssen die Variablen geleert werden, sonst gibt es Fehler.
						$rufnummer = ""
						$defaultid= ""
						$defaultname = ""
						Write-Host
						Write-Host
						Write-Host
						Write-Host " abbrechen mit q:"
						Write-Host
						Write-Host
						Write-Host -ForegroundColor Green " Welche Rufummer soll unser Musteruser sein? Bitte die Rufnummer eingeben:> " -NoNewline
						$rufnummer = Read-Host
						if ($rufnummer -eq "q") {function13}
						# Wenn nichts oder etwas falsches (Buchstaben) eingegeben wird.....
						if ($rufnummer  -notmatch '^\d+$')
							{
								Write-Host
								write-host -ForegroundColor red " Bitte eine Rufnummer eingeben! Es sind nur Zahlen erlaubt!"
								sleep 3
								function13
							}					 
	 
						$defaultid = Get-IpPbxNumberOwner $rufnummer
						$defaultname = $defaultid.Name
	  
						# Prüfen ob es die Rufnummer gibt.  
						if (!$defaultid) 
							{		
								Write-Host
								Write-Host -ForegroundColor Red "Für diese Rufnummer konnten keine Daten gelesen werden!"
								Write-Host
								sleep 3
								function13
							}
		
						else 
							{ 
								Write-Host     
								Write-Host " Folgende Daten werden verwendet:"
								Write-Host
								Write-Host -NoNewline " Rufnummer:  "
								Write-Host -ForegroundColor Yellow "$rufnummer"
								Write-Host -NoNewline " Name:       "
								Write-Host -ForegroundColor Yellow "$defaultname"
								Write-Host
								Write-Host -ForegroundColor Green " Ist das richtig? (j/n) " -NoNewline
								$ergebnis = Read-Host
								if ($ergebnis -eq "n"){function13}
								if ($ergebnis -eq "j")
									{
										Write-Host
										Write-Host -ForegroundColor Green " Schreibe Leitungstasten für ...."
										Write-Host
										$SoureUser = Get-IpPbxUser -Username $defaultname -ReadOnly
										$SoureUserData = Get-IpPbxUserData -Username $defaultname 
										$SourceUserNrOfLinekeys = $SoureUserData.m_iNumberOfLineKeys
										$NrOfLinekeys = $SourceUserNrOfLinekeys-1
										
										$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
										Foreach($Member in $Members) 
											{
												# Musteruser nicht neu schreiben
												if ($Member.Name -ne $defaultname) 
													{
														$u = get-IpPbxUserData -username $Member.Name
														Write-Host -nonewline " "
														Write-Host -nonewline $Member.Name
														Write-Host "..."
														$a = Get-IpPbxUser -Username $Member.Name -ReadOnly
														$InternalNumbera = $a.InternalNumbers
														$u.m_iNumberOfLineKeys = $SourceUserNrOfLinekeys
														$u.m_LineKeySettings = $SoureUserData.m_LineKeySettings
														for ($i=0; $i -le $NrOfLinekeys; $i++) {
														$u.m_LineKeySettings[$i].ExtensionOutGoing = $InternalNumbera }
														Get-IpPbxUser -username $Member.Name | Set-IpPbxUserData -Userdata $u
													}
											}
										
										Write-Host
										Write-Host -ForegroundColor Green " fertig."
										Write-Host
										sleep 3
										function13
									}			
								else 
									{
										write-host -ForegroundColor red {" Falsche Eingabe."}
										sleep 2
										function13  
									}
							}
					}
			}
		
		if ($answer13 -eq 2) 
			{ 
				cls
				Write-Host
				Write-Host " #################################################################################"
				Write-Host " #                                                                               #" 
				Write-Host " #  Leitungstasten löschen und Anzahl auf 3 zurücksetzen (Konfig-Gruppe)         #"
				Write-Host " #                                                                               #" 
				Write-Host " #################################################################################"
				Write-Host
				Write-Host "  Löscht die Inhalte der Leitungstasten bei allen Mitgliedern der Konfig-Gruppe"
				Write-Host "  (Beschriftung, kommende und gehende Rufnummer) und setzt die Anzahl"
				Write-Host "  der Leitungstasten auf 3 zurück"
				Write-Host
				Write-Host
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  1. Leitungstasten löschen."
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host "  0. zurück."  
				Write-Host " ---------------------------------------------------------------------------------"
				Write-Host
				Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
				$answer = Read-Host
				
				if ($answer -eq "1")
					{
						Write-Host
						Write-Host -ForegroundColor Green " Linekeys werden gelöscht...."

						$NumberOfLineKeys = 3
						# Get all user entries (objects) from the group
						$users = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" -ErrorAction Stop

						$users | ForEach-Object 
							{
								Write-Host	
								$currentUser = $_
								Write-Host " Prüfe User $($currentUser.Name)..."

								# Get UserData    
								$userData = Get-IpPbxUserData -UserEntry $currentUser
							
								# Set number of line keys if not equal
								Write-Host " $($currentUser.Name) hat $($userData.m_iNumberOfLineKeys) Leitungstasten. Schreibe neue...."
								$userData.m_iNumberOfLineKeys = $NumberOfLineKeys
								
								# Generate a new empty line key array with the size of $NumberOfLineKeys
								$newLineKeyList = New-Object CLineKeySetting[] $NumberOfLineKeys

								Write-Host " Überschreibe die Einstellungen.... "

								# Copy existing lines into the new line key array
								# If there are more existing lines then the array
								# can take we will ignore these lines
								for ($i = 0; $i -lt $NumberOfLineKeys; $i++)
								{
									$newLineKeyList[$i] = $userData.m_LineKeySettings[$i]
								}
								Write-Verbose " Kopieren der Leitungstasten fertig."
								
								# If the array is not completely filled we
								# have to add new empty lines with default values
								for ($i = 0; $i -lt $newLineKeyList.Count; $i++)
									{
									
									
										$newLineKeyList[$i] = New-Object CLineKeySetting
										$newLineKeyList[$i].WrapUpTimeout = 120
										$userData.m_LineKeySettings[$i].Title = ""
										$userData.m_LineKeySettings[$i].ExtensionInComing = ""
										$userData.m_LineKeySettings[$i].ExtensionOutGoing = ""
									}          
								Write-Host " Leitungstasten Einstellungen neu geschrieben."

								# Overwrite the old list with the new one
								$userData.m_LineKeySettings = $newLineKeyList
								
						   
								# Save UserData
								Set-IpPbxUserData -UserData $userData -UserEntry $currentUser
								Write-Host -ForeGroundColor green " User '$($currentUser.Name)' erfolgreich mit $NumberOfLineKeys leeren Leitungstasten neu geschrieben."    
							} 
							
							
						Write-Host						
						Write-Host -ForegroundColor Green " fertig."
						Write-Host
						pause
						function13
					}
				if ($answer -eq "0") {function13}
				else 
					{
						write-host -ForegroundColor red {" Falsche Eingabe."}
						sleep 2
						function13	  
					}
			}
	
		if ($answer13 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function13	  
			}
	}	

#################################################################################

function function99 
	{
		cls
		Write-Host
		Write-Host " ####################################################################################"
		Write-Host " #                                                                                  #" 
		Write-Host " #  Backup / Restore IpPbx Datenbank                                                #"
		Write-Host " #                                                                                  #" 
		Write-Host " ####################################################################################"
		Write-Host
		Write-Host "  1. Schnelles Datenbank Backup > C:\ProgramData\$BACKUPPATH\Backup"
		Write-Host " ------------------------------------------------------------------------------------"
		Write-Host "  2. Schnelles Datenbank Backup > C:\Backup\Backups\OpenAdmin"
		Write-Host " ------------------------------------------------------------------------------------"
		Write-Host "  3. Schnelles Datenbank Backup > D:\Backup\OpenAdmin (bei MAX Version)"
		Write-Host " ------------------------------------------------------------------------------------"
		Write-Host "  4. Datenbank wiederherstellen < (Ordner auswählen falls mehrere existieren)"
		Write-Host " ------------------------------------------------------------------------------------"
		Write-Host "  0. zurück."  
		Write-Host " ------------------------------------------------------------------------------------"
		Write-Host
		Write-Host  -NoNewline -ForegroundColor Green " Eingabe:> "
		$answer99 = Read-Host

		if ($answer99 -eq "1")
			{ 
				Write-Host
				$DATUM = Get-Date -Format dd.MM.yyyy-HH-mm-ss
				$Command = "C:\Program Files (x86)\$SERVERVERSION\IpPbxConfig.exe"
				$Parms = "/backup -file C:\Programdata\$BACKUPPATH\Backup\IpPbxBackup-$Datum.dat"
				$Prms = $Parms.Split(" ")
				& "$Command" $Prms
				Write-Host
				pause
				function99
			}
	
		if ($answer99 -eq "2")
			{
				$HDDZIEL = “C:\Backup\Backups\OpenAdmin”
				Write-Host
				if (-Not(Test-Path $HDDZIEL)) 
					{
						Write-Host
						Write-Host -foregroundcolor yellow "Ordner $($HDDZIEL) existiert noch nicht, lege ihn an..."
						Write-Host
						New-Item -ItemType Directory -Force -Path $HDDZIEL
						Write-Host
					}
				$DATUM = Get-Date -Format dd.MM.yyyy-HH-mm-ss
				$Command = "C:\Program Files (x86)\$SERVERVERSION\IpPbxConfig.exe"
				$Parms = "/backup -file $($HDDZIEL)\IpPbxBackup-$Datum.dat"
				$Prms = $Parms.Split(" ")
				& "$Command" $Prms
				Write-Host
				pause
				function99
			}

		if ($answer99 -eq "3") 
			{
				Write-Host
				if ($MAXVERSION -eq 0) 
					{	
						Write-Host
						Write-Host -foregroundcolor red "Das ist keine MAX Version, funktion nicht möglich!"
						Write-Host
						sleep 3
						function99
					}	
				$SSDZIEL = "D:\Backup\OpenAdmin" 
				if (-Not(Test-Path $SSDZIEL)) 
					{
						Write-Host
						Write-Host -foregroundcolor yellow "Ordner $($SSDZIEL) existiert noch nicht, lege ihn an..."
						Write-Host
						New-Item -ItemType Directory -Force -Path $SSDZIEL
					}
				$DATUM = Get-Date -Format dd.MM.yyyy-HH-mm-ss
				$Command = "C:\Program Files (x86)\$SERVERVERSION\IpPbxConfig.exe"
				$Parms = "/backup -file $($SSDZIEL)\IpPbxBackup-$Datum.dat"
				$Prms = $Parms.Split(" ")
				& "$Command" $Prms
				Write-Host
				pause
				function99
			}
	
		if ($answer99 -eq "4")
			{
				# Variablen
				$Backuppath1="C:\ProgramData\$BACKUPPATH\Backup\"
				$Backuppath2="C:\Backup\Backups\OpenAdmin\"
				$Backuppath3="D:\Backup\OpenAdmin\"
				$Command = "C:\Program Files (x86)\$SERVERVERSION\IpPbxConfig.exe"
				$dat="$Backuppath2\*.dat"
				$dat3="$Backuppath3\*.dat"

				# Diesen Ordner gibt es immer und beim Start sollte mindestens ein Backup dort erstellt sein.
				Write-Host
				Write-Host -ForegroundColor Yellow "  1.)  $Backuppath1"
				$i = 1

				# Falls der Odner C:\Backup\Backups existiert....
				If (Test-Path $Backuppath2) 
					{
						# und .dat Dateien dort sind nach richtigem Ordner fragen
						if (Test-Path $dat)
							{
								# Nach dem Restore Pfad fragen
								$i = 2
								Write-Host
								Write-Host -ForegroundColor Yellow "  2.)  $Backuppath2"
							}
					}
					
				# Bei einer MAX Version
				If (Test-Path $Backuppath3) 
					{
						# und .dat Dateien dort sind nach richtigem Ordner fragen
						if ((Test-Path $dat3) -And ($i -eq 2))
							{
								$i = 3
								Write-Host
								Write-Host -ForegroundColor Yellow "  3.)  $Backuppath3"
							}
						if ((Test-Path $dat3) -And ($i -eq 1))
							{
								$i = 2
								Write-Host
								Write-Host -ForegroundColor Yellow "  2.)  $Backuppath3"
							}
					}
						# Falls das T-Com Backupscript aktiv ist diese Ordner ebenfalls durchsuchen
						$Woche1 = "C:\Backup\Backups\Woche_1\"
						$Woche2 = "C:\Backup\Backups\Woche_2\"
						$Woche3 = "C:\Backup\Backups\Woche_3\"
						$Woche4 = "C:\Backup\Backups\Woche_4\"
						$Woche5 = "C:\Backup\Backups\Woche_5\"
						If (Test-Path $Woche1) 
							{ 
								$i = 4
								Write-Host
								Write-Host -ForegroundColor Yellow "  4.)  $Woche1"
							}
						If (Test-Path $Woche2) 
							{ 
								$i = 5
								Write-Host
								Write-Host -ForegroundColor Yellow "  5.)  $Woche2"
							}
						If (Test-Path $Woche3) 
							{ 
								$i = 6
								Write-Host
								Write-Host -ForegroundColor Yellow "  6.)  $Woche3"
							}
						If (Test-Path $Woche4) 
							{ 
								$i = 7
								Write-Host
								Write-Host -ForegroundColor Yellow "  7.)  $Woche4"
							}
						If (Test-Path $Woche5) 
							{ 
								$i = 8
								Write-Host
								Write-Host -ForegroundColor Yellow "  8.)  $Woche5"
							}
										Write-Host
										Write-Host -ForegroundColor Green "  abbrechen mit  q:"
										Write-Host			
										Write-Host -ForegroundColor Green -NoNewline " Aus welchem Ordner soll das Backup wiederhergestellt werden?: (1 - $i) > "
										$ordner = Read-Host	
											if ($ordner -eq "q") {function99} 
											if ($ordner -eq 1) {$Backupdir = $Backuppath1 }
											if ($ordner -eq 2) {$Backupdir = $Backuppath2 }
											if ($ordner -eq 3) {$Backupdir = $Backuppath3 }
											if ($ordner -eq 4) {$Backupdir = $Woche1 }
											if ($ordner -eq 5) {$Backupdir = $Woche2 }
											if ($ordner -eq 6) {$Backupdir = $Woche3 }
											if ($ordner -eq 7) {$Backupdir = $Woche4 }
											if ($ordner -eq 8) {$Backupdir = $Woche5 }
									
							
						# Alle vorhandenen Dateien aus dem Backupordner einlesen
						$dir = @(dir $Backupdir *.dat).Name
						if (!$dir) 
							{ 
								Write-Host
								Write-Host -ForegroundColor Red "Keine Dateien im Ordner gefunden!"
								sleep 3
								function99 
							}

					# $i hat die Anzahl der Dateien gespeichert (beginnend bei 0)
					$i=0
					# Jede einzelnen Namen aus dem Array ausgeben
					Write-Host
					Foreach($file in $dir) 
						{
							if (-Not($file -eq "license.dat"))
								{
									Write-Host
									Write-Host -ForegroundColor Yellow " Backup $i.)  $file"
									Write-Host
									$i=$i+1
								}
						}
					$i=$i-1
					Write-Host
					Write-Host -ForegroundColor Green "  abbrechen mit  q:"
					Write-Host
					Write-Host -ForegroundColor Green -NoNewline " Bitte eine Datei zum wiederherstellen auswählen: (0 - $i) > "
					$restore = Read-Host	
					if ($restore -eq "q") {function99} 
					if ($restore -le $i) 
						{
							Write-Host
							Write-Host -ForegroundColor Red " Achtung: Alle Netphone Dienste werden beendet um die Datenbank wiederherzustellen!"
							Write-Host
							Write-Host -NoNewline -ForegroundColor Red " Bist du sicher? 'j' :> " 
							$sicher = Read-Host
							if ($sicher -ne "j") {function99}
							if ($sicher -eq "j") 
								{
									Write-Host
									# Prüfen ob es ein Array oder eine Variable ist unm den richtigen Dateinamen zu bekommen
									if($dir -is [system.array])
										{
											Write-Host -ForegroundColor Green " Datenbank $Backupdir$($dir[$restore]) wird wieder hergestellt...."
										}
									if($dir -isnot [system.array])
										{
											Write-Host -ForegroundColor Green " Datenbank $Backupdir$dir wird wieder hergestellt...."
										}
									Write-Host
									Write-Host -ForegroundColor Green " Netphone Dienste werden angehalten...."
									Write-Host
									&$Command '/stop' '/y'
									Write-Host
									sleep 1
									Write-Host -ForegroundColor Green " Restore wird gestartet...."
									Write-Host
									# Wieder prüfen ob Array oder Variable um dem Programm den richtigen Dateinamen zu übergeben.
									if($dir -is [system.array]){$Backupdat = $Backupdir+$($dir[$restore])}
									if($dir -isnot [system.array]){$Backupdat = $Backupdir+$dir}
									&$command /restore -file $Backupdat /y
									Write-Host
									sleep 1 
									Write-Host -ForegroundColor Green " Netphone Dienste werden gestartet...."
									Write-Host
									sleep 1
									&$Command '/start'
									Write-Host
									Write-Host -ForegroundColor Green " Datenbank $Backupdat wurde wieder hergestellt."
									Write-Host
									sleep 5
									function99
								}
						}
			}
	
		if ($answer99 -eq "0") {mainmenu}
		else 
			{
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				function99	  
			}
	}

#################################################################################

function klingeln 
	{
		Write-Host
		Write-Host -ForegroundColor Green " Klingel Lautstärke wird erhöht und HotKey alt-x schreiben...."
		Write-Host
		# Erstmal den Datensatz aus der Anlage einlesen um die Werte zu ändern
		$2=Get-IpPbxUserData -UserName "$defaultname"
		$2.m_PhoneSettings | Where-Object { $_.VolumeOfRingingToneInternal -ne "8"} |ForEach-Object {$_.VolumeOfRingingToneInternal = $b}
		$2.m_PhoneSettings | Where-Object { $_.VolumeOfRingingToneExternal -ne "8"} |ForEach-Object {$_.VolumeOfRingingToneExternal = $b}

		# Hotkey alt-x für Client in den Vordergrund bringen
		$2.m_HotkeySettings | Where-Object {$_.Command -eq "32808"} | ForEach-Object {$_.Key=88; $_.Alt=1; $_.Shift=0; $_.Ctrl=0; $_.ScanCode=539820033}

		# Daten für alle User in die Datenbank schreiben.
		Get-IpPbxUser | ForEach-Object { 
			Write-Host $_.Name
			Set-IpPbxUserData -UserName $_.Name -Userdata $2
		}
		Write-Host
		Write-Host -ForegroundColor Green " fertig."
		Write-Host
		sleep 3
		function8
	}		

#################################################################################

function writekeys 
	{
		Write-Host
		Write-Host -ForegroundColor Green " Namenstasten werden geschrieben, das dauert etwas..."
		Write-Host
		$SoureUser = Get-IpPbxUser -Username $defaultname1 -ReadOnly
		$Members = Get-IpPbxGroupMember -GroupName "Konfig-Gruppe" 
		Foreach($Member in $Members) 
			{
				Write-Host " für User $($Member.Name)"
				$TargetUser = Get-IpPbxUser -UserName $Member.Name -ReadOnly
				for ($i=0; $i -le 80; $i++) 
					{
						Get-IpPbxSpeedDialKey -UserName $SoureUser.name -SpeedDialKeyId $i | Add-IpPbxSpeedDialKey -UserName $TargetUser.Name -SpeedDialKeyId $i
					}	
			}
		Write-Host
		Write-Host -ForegroundColor Green " fertig."
		Write-Host
		sleep 3
		function7
	}	

#################################################################################

# beenden function: Erlaubt das Script mit "n" zu beenden oder mit "j" zurück zum Hauptmenü zu kommen.  
function beenden 
	{
		cls
		# Zuordnung zum Konferenzuser wieder löschen falls angelegt
		if ($KONFERENZUSER -eq 1) 
			{
				Write-Host 
				Write-Host -ForeGroundColor yellow " Windows Login $env:Username wird dem User Konferenz wieder entfernt. "
				Write-Host
				Get-IpPbxUser -UserName "Konferenz" -AddBuiltInUser | Remove-IpPbxUserWindowsAccount -Confirm:$false -ErrorAction Stop
				Write-Host
			}
		Write-Host
		Write-Host -foregroundcolor green -nonewline " Trenne Verbindung zur Netphone wieder...."
		Disconnect-ippbx
		Write-Host -foregroundcolor green ".OK"
		Write-Host
		Write-Host
		Exit 0
	}  

##################################################################################

# Mainmenu function. Das Menü.  
function mainmenu 
	{  
		 cls 
		 Write-Host
		 Write-Host " #################################################################"
		 Write-Host " #                                                               #" 
		 Write-Host " #    Open Admin Hauptmenü                                       #"
		 Write-Host " #                                                         $Version  #" 
		 Write-Host " #################################################################"
		 Write-Host
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  1. Windows Einstellungen." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  2. Netphone Reg Keys." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  3. Rufumleitungen für alle Nebenstellen." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  4. Rufumleitungen für User der Konfig-Gruppe." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  5. Client Einstellungen (Konfig-Gruppe)"
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  6. Weitere Client Einstellungen (Konfig-Gruppe)."
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  7. Kopieren von Namenstasten."  
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  8. Einstellungen der IP Telefone."
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host "  9. Systeminformationen." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host " 10. Client Zertifikat erstellen bzw löschen." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host " 11. FaxClient Einstellungen (Konfig-Gruppe)." 
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host " 12. Windows Features installieren. (FTP, Firmware und Telnet)"
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host " 13. Leitungstasten kopieren / löschen."
		 Write-Host " -----------------------------------------------------------------" 
		 Write-Host " 99. Backup / Restore Datenbank."
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host -ForeGroundColor Yellow "  0. beenden"  
		 Write-Host " -----------------------------------------------------------------"
		 Write-Host
		 Write-Host -ForegroundColor Green " Bitte eine Auswahl treffen:> " -NoNewline
		 $answer = Read-Host
		 if ($answer -eq "1"){function1}
		 if ($answer -eq "2"){function2}
		 if ($answer -eq "3"){function3}
		 if ($answer -eq "4"){function4}
		 if ($answer -eq "5"){function5}
		 if ($answer -eq "6"){function6}
		 if ($answer -eq "7"){function7}
		 if ($answer -eq "8"){function8}
		 if ($answer -eq "9"){function9} 
		 if ($answer -eq "10"){function10}
		 if ($answer -eq "11"){function11}
		 if ($answer -eq "12"){function12}
		 if ($answer -eq "13"){function13}
		 if ($answer -eq "99"){function99}
		 if ($answer -eq "0"){beenden} 
		 else {
				write-host -ForegroundColor red {" Falsche Eingabe."}
				sleep 2
				mainmenu  
			  } 
		 
       
    }
				
# Aufruf des Startmenüs 
mainmenu  